CHANGE_TICKET_FLOW
This commit is contained in:
parent
3d6e9656b4
commit
925e6e7624
36
ation - Inprogress
Normal file
36
ation - Inprogress
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
|
||||
|
||||
Commands marked with * may be preceded by a number, _N.
|
||||
Notes in parentheses indicate the behavior if _N is given.
|
||||
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
|
||||
|
||||
h H Display this help.
|
||||
q :q Q :Q ZZ Exit.
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
MMOOVVIINNGG
|
||||
|
||||
e ^E j ^N CR * Forward one line (or _N lines).
|
||||
y ^Y k ^K ^P * Backward one line (or _N lines).
|
||||
f ^F ^V SPACE * Forward one window (or _N lines).
|
||||
b ^B ESC-v * Backward one window (or _N lines).
|
||||
z * Forward one window (and set window to _N).
|
||||
w * Backward one window (and set window to _N).
|
||||
ESC-SPACE * Forward one window, but don't stop at end-of-file.
|
||||
d ^D * Forward one half-window (and set half-window to _N).
|
||||
u ^U * Backward one half-window (and set half-window to _N).
|
||||
ESC-) RightArrow * Right one half screen width (or _N positions).
|
||||
ESC-( LeftArrow * Left one half screen width (or _N positions).
|
||||
ESC-} ^RightArrow Right to last column displayed.
|
||||
ESC-{ ^LeftArrow Left to first column.
|
||||
F Forward forever; like "tail -f".
|
||||
ESC-F Like F but stop when search pattern is found.
|
||||
r ^R ^L Repaint screen.
|
||||
R Repaint screen, discarding buffered input.
|
||||
---------------------------------------------------
|
||||
Default "window" is the screen height.
|
||||
Default "half-window" is half of the screen height.
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
SSEEAARRCCHHIINNGG
|
||||
@ -34,6 +34,7 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
dynamic policyDataIsEmpty = 1;
|
||||
dynamic policyHeading;
|
||||
dynamic policyName;
|
||||
dynamic name;
|
||||
dynamic policyType;
|
||||
dynamic policyTickID;
|
||||
dynamic policyDate;
|
||||
@ -188,6 +189,7 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
print(claimTrackMasterList[0]['thz_id']);
|
||||
policyTickID = claimTrackMasterList[0]['thz_id'];
|
||||
policyName = claimTrackMasterList[0]['policy_no'];
|
||||
// name = claimTrackMasterList[0]['name'];
|
||||
policyType = claimTrackMasterList[0]['ticket_type'];
|
||||
policyStatus = claimTrackMasterList[0]['status'];
|
||||
member = claimTrackMasterList[0]['assignee_name'];
|
||||
@ -305,8 +307,15 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
flex: 1,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
// Navigator.pushNamed(
|
||||
// context, 'claims');
|
||||
Navigator.pushNamed(
|
||||
context, 'claims');
|
||||
context,
|
||||
'help',
|
||||
arguments: {
|
||||
'ticketTabSelected': 0
|
||||
},
|
||||
);
|
||||
},
|
||||
child: Icon(
|
||||
Icons
|
||||
@ -325,7 +334,7 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
policyName ?? '',
|
||||
policyType ?? '',
|
||||
textAlign: TextAlign.start,
|
||||
style: GoogleFonts.poppins(
|
||||
fontSize:
|
||||
@ -441,6 +450,8 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
dynamic messagername;
|
||||
messagername =
|
||||
message['notes_by'];
|
||||
dynamic name;
|
||||
name = message['name'];
|
||||
// if (isUserMessage) {
|
||||
// messagername = empName;
|
||||
// } else {
|
||||
@ -511,7 +522,7 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
SizedBox(
|
||||
width: 5),
|
||||
Text(
|
||||
messagername,
|
||||
name,
|
||||
style: GoogleFonts
|
||||
.poppins(
|
||||
fontSize:
|
||||
@ -601,7 +612,7 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
Responsive.isDesktop(
|
||||
context)
|
||||
? 2
|
||||
: 3,
|
||||
: 4,
|
||||
child: Container(
|
||||
alignment: Alignment
|
||||
.centerRight,
|
||||
@ -634,13 +645,6 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
formData);
|
||||
}
|
||||
},
|
||||
child: Text(
|
||||
'Reply',
|
||||
style: GoogleFonts
|
||||
.poppins(
|
||||
color: Colors
|
||||
.white),
|
||||
),
|
||||
style: ElevatedButton
|
||||
.styleFrom(
|
||||
backgroundColor:
|
||||
@ -654,6 +658,13 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
5),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'Reply',
|
||||
style: GoogleFonts
|
||||
.poppins(
|
||||
color: Colors
|
||||
.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -749,15 +760,17 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
|
||||
Widget buildDesktopLayout(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
buildExpandedColumn(context, 'Policy No', policyTickID),
|
||||
buildExpandedColumn(context, 'Policy Name', policyName),
|
||||
buildExpandedColumn(context, 'Ticket Type', policyType),
|
||||
buildExpandedColumn(context, 'Ticket No', policyTickID),
|
||||
if (policyType != "Sales")
|
||||
buildExpandedColumn(context, 'Policy No', policyName),
|
||||
// buildExpandedColumn(context, 'Ticket Type', policyType),
|
||||
buildExpandedColumn(context, 'Status', policyStatus),
|
||||
buildExpandedColumn(context, 'Assign To', member),
|
||||
buildExpandedColumn(context, 'Message', policyMessage),
|
||||
],
|
||||
),
|
||||
if (departmentID == '4') // Conditional check for policy_type
|
||||
@ -808,24 +821,28 @@ class _claimtracklistformState extends State<claimtracklist> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
buildExpandedColumn(context, 'Policy No', policyTickID),
|
||||
buildExpandedColumn(context, 'Policy Name', policyName),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 20),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
buildExpandedColumn(context, 'Status', policyStatus),
|
||||
buildExpandedColumn(context, 'Ticket Type', policyType),
|
||||
buildExpandedColumn(context, 'Ticket No', policyTickID),
|
||||
if (policyType != "Sales")
|
||||
buildExpandedColumn(context, 'Policy No', policyName),
|
||||
if (policyType == "Sales")
|
||||
buildExpandedColumn(context, 'Status', policyStatus),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 20),
|
||||
if (policyType != "Sales")
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
buildExpandedColumn(context, 'Status', policyStatus),
|
||||
// buildExpandedColumn(context, 'Ticket Type', policyType),
|
||||
],
|
||||
),
|
||||
if (policyType != "Sales") SizedBox(height: 20),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
buildExpandedColumn(context, 'Subject', policySubject),
|
||||
buildExpandedColumn(context, 'Assigned To', member),
|
||||
buildExpandedColumn(context, 'Message', policyMessage),
|
||||
],
|
||||
),
|
||||
if (departmentID == '4')
|
||||
|
||||
@ -75,6 +75,29 @@ class _helpState extends State<help> {
|
||||
super.initState();
|
||||
apiService = ApiService(context); // Initialize ApiService here
|
||||
_loadToken();
|
||||
print('initState');
|
||||
getTicketList();
|
||||
// handleTicketRefrsh();
|
||||
}
|
||||
|
||||
void handleTicketRefrsh() {
|
||||
print('handleTicketRefrsh');
|
||||
final args =
|
||||
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
|
||||
|
||||
if (args != null && args.containsKey('ticketTabSelected')) {
|
||||
print('ARGSDATA');
|
||||
setState(() {
|
||||
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
|
||||
closedTrackActive = 1;
|
||||
allClaimsActive = 1;
|
||||
tickets = 0;
|
||||
ticketsActive = 0;
|
||||
isActive = false;
|
||||
|
||||
getTicketList();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@ -85,21 +108,29 @@ class _helpState extends State<help> {
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
print('didChangeDependencies');
|
||||
|
||||
if (!_isArgsHandled) {
|
||||
final args = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
|
||||
// if (!_isArgsHandled) {
|
||||
final args =
|
||||
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
|
||||
print('args - $args');
|
||||
if (args != null && args.containsKey('ticketTabSelected')) {
|
||||
print('args1');
|
||||
setState(() {
|
||||
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
|
||||
|
||||
if (args != null && args.containsKey('ticketTabSelected')) {
|
||||
setState(() {
|
||||
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
|
||||
closedTrackActive = 1;
|
||||
allClaimsActive = 1;
|
||||
isActive = false;
|
||||
});
|
||||
}
|
||||
|
||||
_isArgsHandled = true; // ✅ only apply once
|
||||
print('args2- $tickets');
|
||||
closedTrackActive = 1;
|
||||
allClaimsActive = 1;
|
||||
tickets = 0;
|
||||
ticketsActive = 0;
|
||||
isActive = false;
|
||||
if (tickets == 0) getTicketList();
|
||||
});
|
||||
}
|
||||
|
||||
// _isArgsHandled = true; // ✅ only apply once
|
||||
// }
|
||||
}
|
||||
|
||||
Future<void> _loadToken() async {
|
||||
@ -122,6 +153,7 @@ class _helpState extends State<help> {
|
||||
print(client_id);
|
||||
getSelfEmployeeProfile();
|
||||
getTrackClaimsList();
|
||||
getTicketList();
|
||||
} else {
|
||||
// Token is empty or null, handle accordingly (e.g., navigate to login screen)
|
||||
ToastHelper.showErrorToast(context, 'Session Out');
|
||||
@ -637,6 +669,7 @@ class _helpState extends State<help> {
|
||||
ticketsActive = 0;
|
||||
allClaimsActive = 1;
|
||||
closedTrackActive = 1;
|
||||
tickets = 0;
|
||||
// isActive = false;
|
||||
// allClaimsActive = 1;
|
||||
// closedTrackActive = 1;
|
||||
|
||||
@ -111,10 +111,10 @@ class ApiService {
|
||||
await _initializeToken();
|
||||
}
|
||||
|
||||
final url2 =
|
||||
final url =
|
||||
Uri.parse('${Environment.apiUrl}ticketList?mobile=$empMobileNo');
|
||||
|
||||
final url = Uri.parse('${Environment.apiUrl}ticketList?mobile=1234567890');
|
||||
final url1 = Uri.parse('${Environment.apiUrl}ticketList?mobile=1234567890');
|
||||
final headers = {
|
||||
'Authorization': 'Bearer $_token' ?? '',
|
||||
};
|
||||
|
||||
@ -119,8 +119,8 @@ class _ticketsState extends State<tickets> {
|
||||
client_id!, empCodeString!, 'Active', client_branch_id, mobileNo);
|
||||
|
||||
final responseInactive =
|
||||
await apiService.getActiveAndInactivePolicyDetails(client_id!,
|
||||
empCodeString!, 'Inactive', client_branch_id, mobileNo);
|
||||
await apiService.getActiveAndInactivePolicyDetails(client_id!,
|
||||
empCodeString!, 'Inactive', client_branch_id, mobileNo);
|
||||
|
||||
final bool isActiveSuccess = responseActive['status'] == 'success' &&
|
||||
responseActive['data'] != null;
|
||||
@ -191,9 +191,7 @@ class _ticketsState extends State<tickets> {
|
||||
}
|
||||
});
|
||||
|
||||
if (isServiceValid &&
|
||||
isPolicyValid &&
|
||||
isSubjectValid && isMessageValid) {
|
||||
if (isServiceValid && isPolicyValid && isSubjectValid && isMessageValid) {
|
||||
// Proceed to submit
|
||||
} else {
|
||||
ToastHelper.showErrorToast(context, 'Please Fill Required Fields');
|
||||
@ -215,7 +213,8 @@ class _ticketsState extends State<tickets> {
|
||||
'email': decodedToken['email_corporate'] != null
|
||||
? decodedToken['email_corporate']
|
||||
: '',
|
||||
'empcode': decodedToken['emp_code'] != null ? decodedToken['emp_code'] : '',
|
||||
'empcode':
|
||||
decodedToken['emp_code'] != null ? decodedToken['emp_code'] : '',
|
||||
'message': messageController.text,
|
||||
'mobile': decodedToken['mobile'] != null ? decodedToken['mobile'] : '',
|
||||
'name': decodedToken['name'] != null ? decodedToken['name'] : '',
|
||||
@ -250,7 +249,7 @@ class _ticketsState extends State<tickets> {
|
||||
setState(() {
|
||||
isLoading = false;
|
||||
});
|
||||
Navigator.pushNamed(context, 'help');
|
||||
// Navigator.pushNamed(context, 'help');
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
'help',
|
||||
@ -273,265 +272,299 @@ class _ticketsState extends State<tickets> {
|
||||
body: Stack(children: [
|
||||
SingleChildScrollView(
|
||||
child: Container(
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.symmetric(
|
||||
horizontal: MediaQuery.of(context).size.width *
|
||||
0.2, // 30% of screen width as horizontal padding
|
||||
vertical: MediaQuery.of(context).size.height *
|
||||
0.05, // 5% of screen height as vertical padding
|
||||
)
|
||||
: EdgeInsets.all(10),
|
||||
color: Colors.white,
|
||||
child: Column(children: [
|
||||
Card(
|
||||
elevation: 5,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.symmetric(
|
||||
horizontal: MediaQuery.of(context).size.width *
|
||||
0.2, // 30% of screen width as horizontal padding
|
||||
vertical: MediaQuery.of(context).size.height *
|
||||
0.05, // 5% of screen height as vertical padding
|
||||
)
|
||||
: EdgeInsets.all(10),
|
||||
color: Colors.white,
|
||||
child: Column(children: [
|
||||
Card(
|
||||
elevation: 5,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(15.0), // Set border radius here
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white, // Set background color to white
|
||||
borderRadius: BorderRadius.circular(
|
||||
15.0), // Set border radius for Container
|
||||
),
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.only(top: 15, bottom: 15, left: 15, right: 15)
|
||||
: EdgeInsets.only(
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white, // Set background color to white
|
||||
borderRadius: BorderRadius.circular(
|
||||
15.0), // Set border radius for Container
|
||||
),
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.only(top: 15, bottom: 15, left: 15, right: 15)
|
||||
: EdgeInsets.only(
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
left: 10,
|
||||
right: 10), // Add padding to the container
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 12,
|
||||
child: Container(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(
|
||||
0xFFFFFCE5), // Set background color for the container
|
||||
borderRadius: BorderRadius.circular(
|
||||
10), // Set border radius for the container
|
||||
),
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.only(
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 12,
|
||||
child: Container(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(
|
||||
0xFFFFFCE5), // Set background color for the container
|
||||
borderRadius: BorderRadius.circular(
|
||||
10), // Set border radius for the container
|
||||
),
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.only(
|
||||
top: 20,
|
||||
bottom: 20,
|
||||
left: 0,
|
||||
right: 0)
|
||||
: EdgeInsets.only(
|
||||
: EdgeInsets.only(
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
left: 10,
|
||||
right: 10),
|
||||
child: Column(
|
||||
crossAxisAlignment:
|
||||
child: Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
Navigator.pushNamed(
|
||||
context, 'help');
|
||||
},
|
||||
child: Icon(
|
||||
Icons
|
||||
.chevron_left, // Replace with your desired icon
|
||||
color: Color(0xFF000000),
|
||||
size: 30,
|
||||
),
|
||||
),
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
Navigator.pushNamed(
|
||||
context, 'help');
|
||||
},
|
||||
child: Icon(
|
||||
Icons
|
||||
.chevron_left, // Replace with your desired icon
|
||||
color: Color(0xFF000000),
|
||||
size: 30,
|
||||
),
|
||||
Expanded(
|
||||
flex: 11,
|
||||
child: Row(
|
||||
mainAxisAlignment:
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 11,
|
||||
child: Row(
|
||||
mainAxisAlignment:
|
||||
Responsive.isDesktop(context)
|
||||
? MainAxisAlignment.center
|
||||
: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Raise a Ticket',
|
||||
textAlign: TextAlign.start,
|
||||
style: GoogleFonts.poppins(
|
||||
fontSize:
|
||||
children: [
|
||||
Text(
|
||||
'Raise a Ticket',
|
||||
textAlign: TextAlign.start,
|
||||
style: GoogleFonts.poppins(
|
||||
fontSize:
|
||||
Responsive.isDesktop(
|
||||
context)
|
||||
context)
|
||||
? 20
|
||||
: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF000000),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
), // Space between rows
|
||||
// Add more rows as needed
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF000000),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Container(
|
||||
child: Column(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
), // Space between rows
|
||||
// Add more rows as needed
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Container(
|
||||
child: Column(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.start,
|
||||
crossAxisAlignment:
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Form(
|
||||
key: formKey,
|
||||
child: Column(
|
||||
children: [
|
||||
Form(
|
||||
key: formKey,
|
||||
child: Column(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment
|
||||
.start,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
buildDropdownField<int>(
|
||||
'Service',
|
||||
(value) {
|
||||
setState(() {
|
||||
serviceId = value;
|
||||
selectedServiceName = serviceList.firstWhere(
|
||||
(serList) => serList['id'] == value,
|
||||
orElse: () => {'name': ''},
|
||||
)['name'];
|
||||
isServiceValid = true;
|
||||
});
|
||||
},
|
||||
false,
|
||||
serviceList,
|
||||
'name',
|
||||
serviceId,
|
||||
valueKey: 'id',
|
||||
),
|
||||
if (!isServiceValid)
|
||||
Text('Please select a Service',
|
||||
style: TextStyle(color: Colors.red)),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
if (selectedServiceName != "Sales")
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
buildDropdownField<String>(
|
||||
'Policy Number',
|
||||
(value) {
|
||||
setState(() {
|
||||
policyNumberId = value;
|
||||
isPolicyValid = true;
|
||||
});
|
||||
buildDropdownField<
|
||||
int>(
|
||||
'Type',
|
||||
(value) {
|
||||
setState(() {
|
||||
serviceId =
|
||||
value;
|
||||
selectedServiceName =
|
||||
serviceList
|
||||
.firstWhere(
|
||||
(serList) =>
|
||||
serList[
|
||||
'id'] ==
|
||||
value,
|
||||
orElse: () =>
|
||||
{
|
||||
'name': ''
|
||||
},
|
||||
false,
|
||||
policyList,
|
||||
'policy_no',
|
||||
policyNumberId,
|
||||
valueKey: 'policy_no',
|
||||
),
|
||||
if (!isPolicyValid)
|
||||
Text('Please select a policy',
|
||||
style: TextStyle(color: Colors.red)),
|
||||
],
|
||||
),
|
||||
|
||||
SizedBox(height: 15),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
buildTextField('Subject',
|
||||
subjectController),
|
||||
if (!isSubjectValid)
|
||||
Text('Please enter the Subject', style: TextStyle(color: Colors.red)),
|
||||
SizedBox(height: 15),
|
||||
buildTextAreaField(
|
||||
'Message',
|
||||
messageController),
|
||||
if (!isMessageValid)
|
||||
Text('Please enter the Message', style: TextStyle(color: Colors.red)),
|
||||
]
|
||||
)['name'];
|
||||
isServiceValid =
|
||||
true;
|
||||
});
|
||||
},
|
||||
false,
|
||||
serviceList,
|
||||
'name',
|
||||
serviceId,
|
||||
valueKey: 'id',
|
||||
),
|
||||
if (!isServiceValid)
|
||||
Text(
|
||||
'Please select a Service',
|
||||
style: TextStyle(
|
||||
color: Colors
|
||||
.red)),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
SizedBox(height: 15),
|
||||
if (selectedServiceName !=
|
||||
"Sales")
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment
|
||||
.start,
|
||||
children: [
|
||||
buildDropdownField<
|
||||
String>(
|
||||
'Policy Number',
|
||||
(value) {
|
||||
setState(() {
|
||||
policyNumberId =
|
||||
value;
|
||||
isPolicyValid =
|
||||
true;
|
||||
});
|
||||
},
|
||||
false,
|
||||
policyList,
|
||||
'policy_no',
|
||||
policyNumberId,
|
||||
valueKey:
|
||||
'policy_no',
|
||||
),
|
||||
if (!isPolicyValid)
|
||||
Text(
|
||||
'Please select a policy',
|
||||
style: TextStyle(
|
||||
color: Colors
|
||||
.red)),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment
|
||||
.start,
|
||||
children: [
|
||||
buildTextField(
|
||||
'Subject',
|
||||
subjectController),
|
||||
if (!isSubjectValid)
|
||||
Text(
|
||||
'Please enter the Subject',
|
||||
style: TextStyle(
|
||||
color: Colors
|
||||
.red)),
|
||||
SizedBox(
|
||||
height: 15),
|
||||
buildTextAreaField(
|
||||
'Message',
|
||||
messageController),
|
||||
if (!isMessageValid)
|
||||
Text(
|
||||
'Please enter the Message',
|
||||
style: TextStyle(
|
||||
color: Colors
|
||||
.red)),
|
||||
]),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 12,
|
||||
child: Container(
|
||||
alignment: Alignment.centerRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
sendFormDataToApi();
|
||||
},
|
||||
child: Text(
|
||||
'Send',
|
||||
style: GoogleFonts.poppins(
|
||||
color: Colors.white),
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor:
|
||||
],
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 12,
|
||||
child: Container(
|
||||
alignment: Alignment.centerRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
sendFormDataToApi();
|
||||
},
|
||||
child: Text(
|
||||
'Send',
|
||||
style: GoogleFonts.poppins(
|
||||
color: Colors.white),
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor:
|
||||
Color(0xFFE26728),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(
|
||||
5),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
))),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
))),
|
||||
],
|
||||
),
|
||||
SizedBox(height: Responsive.isDesktop(context) ? 40 : 60),
|
||||
]),
|
||||
)),
|
||||
),
|
||||
),
|
||||
SizedBox(height: Responsive.isDesktop(context) ? 40 : 60),
|
||||
]),
|
||||
)),
|
||||
if (isLoading)
|
||||
Container(
|
||||
color: Color(0x98FFFCE5), // Semi-transparent background
|
||||
child: Center(
|
||||
child: // Your GIF loader widget
|
||||
Image.asset(
|
||||
height: 60,
|
||||
width: 60,
|
||||
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
|
||||
Image.asset(
|
||||
height: 60,
|
||||
width: 60,
|
||||
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
|
||||
),
|
||||
),
|
||||
if (Responsive.isDesktop(context))
|
||||
@ -557,36 +590,36 @@ class _ticketsState extends State<tickets> {
|
||||
bottomNavigationBar: Responsive.isDesktop(context)
|
||||
? null
|
||||
: CustomBottomNavigationBar(
|
||||
onTabChanged: (index) {
|
||||
// repositionBotman();
|
||||
if (index == 0) {
|
||||
Navigator.pushNamed(context, 'home');
|
||||
} else if (index == 1) {
|
||||
Navigator.pushNamed(context, 'claims');
|
||||
} else if (index == 2) {
|
||||
Navigator.pushNamed(context, 'profile');
|
||||
} else if (index == 3) {
|
||||
Navigator.pushNamed(context, 'help');
|
||||
// Navigator.pushNamed(context, 'help');
|
||||
} else if (index == 4) {
|
||||
Navigator.pushNamed(context, 'wellness');
|
||||
}
|
||||
},
|
||||
icons: [
|
||||
Icons.home_outlined,
|
||||
Icons.sticky_note_2_outlined,
|
||||
Icons.person_outline_outlined,
|
||||
Icons.headset_mic_outlined,
|
||||
Icons.health_and_safety_outlined,
|
||||
],
|
||||
labels: [
|
||||
"Home",
|
||||
"Claim",
|
||||
"Profile",
|
||||
"Help",
|
||||
"Wellness",
|
||||
], // Initial index of the bottom navigation bar
|
||||
),
|
||||
onTabChanged: (index) {
|
||||
// repositionBotman();
|
||||
if (index == 0) {
|
||||
Navigator.pushNamed(context, 'home');
|
||||
} else if (index == 1) {
|
||||
Navigator.pushNamed(context, 'claims');
|
||||
} else if (index == 2) {
|
||||
Navigator.pushNamed(context, 'profile');
|
||||
} else if (index == 3) {
|
||||
Navigator.pushNamed(context, 'help');
|
||||
// Navigator.pushNamed(context, 'help');
|
||||
} else if (index == 4) {
|
||||
Navigator.pushNamed(context, 'wellness');
|
||||
}
|
||||
},
|
||||
icons: [
|
||||
Icons.home_outlined,
|
||||
Icons.sticky_note_2_outlined,
|
||||
Icons.person_outline_outlined,
|
||||
Icons.headset_mic_outlined,
|
||||
Icons.health_and_safety_outlined,
|
||||
],
|
||||
labels: [
|
||||
"Home",
|
||||
"Claim",
|
||||
"Profile",
|
||||
"Help",
|
||||
"Wellness",
|
||||
], // Initial index of the bottom navigation bar
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -620,14 +653,14 @@ class _ticketsState extends State<tickets> {
|
||||
}
|
||||
|
||||
Widget buildDropdownField<T>(
|
||||
String label,
|
||||
void Function(T?) onChanged,
|
||||
bool readOnly,
|
||||
List<Map<String, dynamic>> itemsList,
|
||||
String displayField,
|
||||
T? selectedValue, {
|
||||
String valueKey = 'id',
|
||||
}) {
|
||||
String label,
|
||||
void Function(T?) onChanged,
|
||||
bool readOnly,
|
||||
List<Map<String, dynamic>> itemsList,
|
||||
String displayField,
|
||||
T? selectedValue, {
|
||||
String valueKey = 'id',
|
||||
}) {
|
||||
return DropdownButtonFormField<T>(
|
||||
value: selectedValue,
|
||||
decoration: InputDecoration(labelText: label),
|
||||
@ -635,7 +668,7 @@ class _ticketsState extends State<tickets> {
|
||||
return DropdownMenuItem<T>(
|
||||
value: item[valueKey] as T, // ✅ cast to generic type
|
||||
child:
|
||||
Text(item[displayField].toString()), // always display as String
|
||||
Text(item[displayField].toString()), // always display as String
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: readOnly ? null : onChanged,
|
||||
@ -647,4 +680,4 @@ class _ticketsState extends State<tickets> {
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
|
||||
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
|
||||
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
|
||||
FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin"))
|
||||
LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
|
||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user