Merge branch 'master' of bitbucket.org:jubilian/post_enrollment_app

This commit is contained in:
sanjeev.p 2026-03-17 11:04:51 +05:30
commit 0e9b2ebf6d
13 changed files with 594 additions and 365 deletions

View File

@ -19,12 +19,12 @@ if (project.hasProperty('google-services.json')) {
def flutterVersionCode = localProperties.getProperty('flutter.versionCode') def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) { if (flutterVersionCode == null) {
flutterVersionCode = '54' flutterVersionCode = '55'
} }
def flutterVersionName = localProperties.getProperty('flutter.versionName') def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) { if (flutterVersionName == null) {
flutterVersionName = '2.0.16' flutterVersionName = '2.0.17'
} }
def keystoreProperties = new Properties() def keystoreProperties = new Properties()

View File

@ -107,42 +107,73 @@ class _changesPasswordState extends State<changesPassword> {
}, },
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
Map<String, dynamic> data = json.decode(response.body); Map<String, dynamic> data = json.decode(response.body);
String? statusVerification = data['status']; String? statusVerification = data['status'];
String? message = data['message']; String? message = data['message'];
if (statusVerification == 'success') { if (statusVerification == 'success') {
final SharedPreferences prefs = await SharedPreferences final SharedPreferences prefs = await SharedPreferences
.getInstance(); .getInstance();
await SessionManager().clear(); await SessionManager().clear();
await prefs.clear(); await prefs.clear();
setState(() { setState(() {
_isLoading = false; _isLoading = false;
}); });
ToastHelper.showSuccessToast(context, message!); ToastHelper.showSuccessToast(context, message!);
context.go('/login'); context.go('/login');
} else { } else {
setState(() { setState(() {
_isLoading = false; _isLoading = false;
}); });
ToastHelper.showErrorToast(context, message!); ToastHelper.showErrorToast(context, message!);
print('Invalid mobile number'); print('Invalid mobile number');
} }
} else { } else if (response.statusCode == 401) {
setState(() { setState(() {
_isLoading = false; _isLoading = false;
}); });
ToastHelper.showErrorToast(context, 'Something went wrong'); await SessionManager().clear();
throw Exception('Failed to verify mobile number'); ToastHelper.showErrorToast(context, 'Session Out');
} if (!context.mounted) return;
} context.go('/login');
} catch (e) {
setState(() { } else if (response.statusCode == 403) {
_isLoading = false; setState(() {
}); _isLoading = false;
// ToastHelper.showErrorToast(context, 'Something went wrong'); });
print('Error: $e'); await SessionManager().clear();
} ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else {
setState(() {
_isLoading = false;
});
throw Exception('Failed to load data');
}
}
} catch (e) {
setState(() {
_isLoading = false;
});
// ToastHelper.showErrorToast(context, 'Something went wrong');
print('Error: $e');
}
// 🔹 Password validation // 🔹 Password validation
// if (password.isEmpty) { // if (password.isEmpty) {

View File

@ -268,13 +268,18 @@ class _MyEmailVerifyState extends State<MyEmailVerify> {
String status = data['status']; String status = data['status'];
// Directly access the post_enrollment data // Directly access the post_enrollment data
Map<String, dynamic> post = data['post_enrollment']; Map<String, dynamic>? post;
if (data['post_enrollment'] != null &&
data['post_enrollment'] is Map<String, dynamic>) {
post = data['post_enrollment'];
}
print('post: $post'); print('post: $post');
_postToken = postToken; _postToken = postToken;
String postStatus = post['status'];
if (postStatus == 'success') { if (post != null && post['status'] == 'success') {
setState(() { setState(() {
_isOtpVerified = true; // LOCK _isOtpVerified = true; // LOCK
}); });
@ -291,11 +296,43 @@ class _MyEmailVerifyState extends State<MyEmailVerify> {
// Show a Snackbar if the OTP is invalid // Show a Snackbar if the OTP is invalid
print('OTP verification failed. Please try again.'); print('OTP verification failed. Please try again.');
} }
} else if (response.statusCode == 401) {
setState(() {
_isLoading = false;
});
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 403) {
setState(() {
_isLoading = false;
});
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else { } else {
final SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() {
prefs.clear(); _isLoading = false;
ToastHelper.showWarningToast(context, 'Something went wrong'); });
throw Exception('Failed to verify OTP'); throw Exception('Failed to load data');
} }
} catch (e) { } catch (e) {
final SharedPreferences prefs = await SharedPreferences.getInstance(); final SharedPreferences prefs = await SharedPreferences.getInstance();
@ -887,42 +924,6 @@ class _MyEmailVerifyState extends State<MyEmailVerify> {
), ),
), ),
), ),
if (!Responsive.isMobile(context) &&
!Responsive.isTablet(context))
Expanded(
flex: 2,
child: MouseRegion(
cursor: SystemMouseCursors.click,
child: GestureDetector(
onTap: () {
context.go('/hrLogin');
// Navigator.pushNamed(
// context, 'hrLogin');
},
child: Row(
mainAxisAlignment: MainAxisAlignment
.end, // Align to the end (right)
children: [
Text(
'HR Login',
style: GoogleFonts.poppins(
color: Color(
0xFF000000), // Text color
// Add other text styles as needed
),
),
SizedBox(width: 5),
Icon(
Icons
.east, // Icon for customer login
color: Colors
.black, // Adjust color as needed
),
],
),
),
),
),
], ],
), ),
], ],
@ -953,38 +954,40 @@ class _MyEmailVerifyState extends State<MyEmailVerify> {
MainAxisAlignment.center, MainAxisAlignment.center,
children: [ children: [
if (!Responsive.isMobile(context) && if (!Responsive.isMobile(context) &&
!Responsive.isTablet(context)) !Responsive.isTablet(context))...[
Row( Row(
children: [ children: [
Expanded( Expanded(
flex: 10, flex: 10,
child: Align( child: Align(
alignment: Responsive alignment: Responsive
.isDesktop(context) .isDesktop(context)
? Alignment.center ? Alignment.center
: Alignment : Alignment
.bottomCenter, // Align to the start .bottomCenter, // Align to the start
child: _size.width <= 1100 child: _size.width <= 1100
? Image.asset( ? Image.asset(
'assets/nhance_app_logo.png', 'assets/nhance_app_logo.png',
width: 150, width: 150,
height: 150, height: 150,
) )
: _size.width > 1100 : _size.width > 1100
? Image.asset( ? Image.asset(
'assets/nhance_app_logo.png', 'assets/nhance_app_logo.png',
width: 150, width: 150,
height: 150, height: 150,
) )
: Image.asset( : Image.asset(
'assets/nhance_app_logo.png', 'assets/nhance_app_logo.png',
width: 150, width: 150,
height: 150, height: 150,
), ),
)), )),
], ],
), ),
SizedBox(height: 10), SizedBox(height: 10),
],
// SizedBox( // SizedBox(
// height: Responsive.isDesktop(context) // height: Responsive.isDesktop(context)
// ? _size.height * 0.1 // ? _size.height * 0.1

View File

@ -503,13 +503,18 @@ class ApiService {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonDecode(response.body); return jsonDecode(response.body);
} else if (response.statusCode == 401) { } else if (response.statusCode == 401) {
if (!_isSessionOutToastShown) { await _clearLocalStorageAndRedirect();
_isSessionOutToastShown = true; return {};
await _clearLocalStorageAndRedirect(); } else if (response.statusCode == 403) {
} await _clearLocalStorageAndRedirect();
return {};
} else if (response.statusCode == 451) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
return {}; return {};
} else if (response.statusCode == 429) { } else if (response.statusCode == 429) {
final body = jsonDecode(response.body); final body = jsonDecode(response.body);
final message = body['message']; final message = body['message'];
ToastHelper.showWarningToast(context, message); ToastHelper.showWarningToast(context, message);
return {}; return {};

View File

@ -172,9 +172,35 @@ class _loginState extends State<login> {
final SharedPreferences prefs = await SharedPreferences.getInstance(); final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.clear(); prefs.clear();
} }
} else if (response.statusCode == 401) {
setState(() {
_isLoading = false;
});
ToastHelper.showErrorToast(context, 'Session Out');
} else if (response.statusCode == 403) {
setState(() {
_isLoading = false;
});
ToastHelper.showErrorToast(context, 'Session Out');
} else if (response.statusCode == 451) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else { } else {
ToastHelper.showErrorToast(context, 'Something went wrong'); setState(() {
throw Exception('Failed to verify pin number'); _isLoading = false;
});
throw Exception('Failed to load data');
} }
} catch (e) { } catch (e) {
// ToastHelper.showErrorToast(context, 'Something went wrong'); // ToastHelper.showErrorToast(context, 'Something went wrong');
@ -1100,43 +1126,6 @@ class _loginState extends State<login> {
height: Responsive.isDesktop(context) ? 150 : 100, height: Responsive.isDesktop(context) ? 150 : 100,
)), )),
), ),
if (!Responsive.isMobile(context) &&
!Responsive.isTablet(context))
Expanded(
flex: 2,
child: MouseRegion(
cursor: SystemMouseCursors.click,
child: GestureDetector(
onTap: () {
// Add your navigation logic here
// For example, you can use Navigator.push to navigate to another page
Navigator.pushNamed(
context, 'hrLogin');
},
child: Row(
mainAxisAlignment: MainAxisAlignment
.end, // Align to the end (right)
children: [
Text(
'HR Login',
style: TextStyle(
color: Color(
0xFF000000), // Text color
// Add other text styles as needed
),
),
SizedBox(width: 5),
Icon(
Icons
.east, // Icon for customer login
color: Colors
.black, // Adjust color as needed
),
],
),
),
),
),
], ],
), ),
], ],

View File

@ -1269,8 +1269,8 @@ class _claimsState extends State<claims> {
message: message:
claimsSubject, // Full text shown on hover claimsSubject, // Full text shown on hover
child: Text( child: Text(
claimsSubject.length > 30 claimsSubject.length > 20
? '${claimsSubject.substring(0, 30)}...' ? '${claimsSubject.substring(0, 20)}...'
: claimsSubject, : claimsSubject,
textAlign: TextAlign.left, textAlign: TextAlign.left,
style: GoogleFonts.poppins( style: GoogleFonts.poppins(

View File

@ -80,6 +80,10 @@ class _planclaimsformState extends State<planclaimsform> {
final fileService = FileUploadService(); final fileService = FileUploadService();
bool isSubmitting = false; bool isSubmitting = false;
Map<String, dynamic> claimTypeMap = {};
List<Map<String, dynamic>> claimTypeList = [];
int? claimTypeId;
bool isClaimTypeValid = true;
// Declare subjectController and bodyController as instance variables // Declare subjectController and bodyController as instance variables
late TextEditingController subjectController; late TextEditingController subjectController;
@ -207,16 +211,20 @@ class _planclaimsformState extends State<planclaimsform> {
print('fromClaimsPage $fromClaimsPage'); print('fromClaimsPage $fromClaimsPage');
} }
if (fromClaimsPage == 0) { if (fromClaimsPage == 0) {
claimSubject = claimsDetails['claim_subject']; setState(() {
print('claimSubject $claimSubject'); claimSubject = claimsDetails['claim_subject'];
claimsDepartmentId = claimsDetails['ticket_type_id']; print('claimSubject $claimSubject');
rawPolicyStartDate = claimsDetails['policy_start_date']; claimsDepartmentId = claimsDetails['ticket_type_id'];
print('rawPolicyStartDate $rawPolicyStartDate'); rawPolicyStartDate = claimsDetails['policy_start_date'];
rawPolicyEndDate = claimsDetails['claims_grace_date']; print('rawPolicyStartDate $rawPolicyStartDate');
print('rawpolicyEndDate $rawPolicyEndDate'); rawPolicyEndDate = claimsDetails['claims_grace_date'];
print('claimsDepartmentId $claimsDepartmentId'); print('rawpolicyEndDate $rawPolicyEndDate');
claimsPolicyNo = claimsDetails['policy_no']; print('claimsDepartmentId $claimsDepartmentId');
client_policy_id = claimsDetails['client_policy_id']; claimsPolicyNo = claimsDetails['policy_no'];
client_policy_id = claimsDetails['client_policy_id'];
print('Current Client ID : ${client_policy_id}');
});
// employeePolicyList = claimsDetails['EmployeePolicy']; // employeePolicyList = claimsDetails['EmployeePolicy'];
// print('employeePolicyList : $employeePolicyList'); // print('employeePolicyList : $employeePolicyList');
List<dynamic> empList = claimsDetails['EmployeePolicy']; List<dynamic> empList = claimsDetails['EmployeePolicy'];
@ -286,11 +294,11 @@ class _planclaimsformState extends State<planclaimsform> {
try { try {
// Call both APIs // Call both APIs
final responseActive = await apiService.getActiveAndInactivePolicyDetails( final responseActive = await apiService.getActiveAndInactivePolicyDetails(
client_id!, empCodeString!, 'Active', client_branch_id,mobileNo,emailId client_id!, empCodeString!, 'Active', client_branch_id,mobileNo,emailId
); );
final responseInactive = await apiService.getActiveAndInactivePolicyDetails( final responseInactive = await apiService.getActiveAndInactivePolicyDetails(
client_id!, empCodeString!, 'Inactive', client_branch_id,mobileNo,emailId client_id!, empCodeString!, 'Inactive', client_branch_id,mobileNo,emailId
); );
final bool isActiveSuccess = responseActive['status'] == 'success' && responseActive['data'] != null; final bool isActiveSuccess = responseActive['status'] == 'success' && responseActive['data'] != null;
@ -368,11 +376,23 @@ class _planclaimsformState extends State<planclaimsform> {
// 'private': department['private'], // 'private': department['private'],
}; };
}).toList(); }).toList();
claimTypeMap = Map<String, dynamic>.from(response['claim_type']);
isLoading = false; isLoading = false;
}); });
// AUTO SELECT SERVICE = 1 (GMC)
if (fromClaimsPage == 1 && departmentList.isNotEmpty) {
serviceId = 1;
loadClaimTypes(serviceId);
}
if (fromClaimsPage == 0) { if (fromClaimsPage == 0) {
setInitialServiceId(departmentList); setInitialServiceId(departmentList);
loadClaimTypes(claimsDepartmentId);
} }
// if (fromClaimsPage == 0) {
// setInitialServiceId(departmentList);
// }
} else { } else {
throw Exception('Failed to fetch department list'); throw Exception('Failed to fetch department list');
} }
@ -381,6 +401,35 @@ class _planclaimsformState extends State<planclaimsform> {
} }
} }
void loadClaimTypes(int? serviceId) {
if (serviceId == null) return;
String key = serviceId.toString();
if (claimTypeMap.containsKey(key)) {
Map<String, dynamic> types =
Map<String, dynamic>.from(claimTypeMap[key]);
claimTypeList = types.entries.map((entry) {
return {
'id': int.parse(entry.key),
'name': entry.value,
};
}).toList();
// // AUTO SELECT FIRST CLAIM TYPE
// if (claimTypeList.isNotEmpty) {
// claimTypeId = claimTypeList.first['id'];
// }
setState(() {});
} else {
claimTypeList = [];
claimTypeId = null;
setState(() {});
}
}
void fetchPoliciesBasedOnService(int? serviceId) { void fetchPoliciesBasedOnService(int? serviceId) {
if (policyList.isEmpty) { if (policyList.isEmpty) {
print('Policy list is empty. Ensure data is fetched before filtering.'); print('Policy list is empty. Ensure data is fetched before filtering.');
@ -389,7 +438,7 @@ class _planclaimsformState extends State<planclaimsform> {
setState(() { setState(() {
policyNumberId = null; policyNumberId = null;
policyTypeCondition = null; policyTypeCondition = null;
client_policy_id = null; // client_policy_id = null;
}); });
print('1111 serviceId : $serviceId'); print('1111 serviceId : $serviceId');
if (serviceId == 1 || serviceId == 2 || serviceId == 3 || serviceId == 4 || serviceId == 72) { if (serviceId == 1 || serviceId == 2 || serviceId == 3 || serviceId == 4 || serviceId == 72) {
@ -426,7 +475,7 @@ class _planclaimsformState extends State<planclaimsform> {
if (fromClaimsPage == 0) { if (fromClaimsPage == 0) {
// Find the object where 'policy_no' matches 'claimsPolicyNo' // Find the object where 'policy_no' matches 'claimsPolicyNo'
final matchingPolicy = policyNumberList.firstWhere( final matchingPolicy = policyNumberList.firstWhere(
(item) => item['policy_no'] == claimsPolicyNo, (item) => item['policy_no'] == claimsPolicyNo,
orElse: () => {}); orElse: () => {});
// Set policyNumberId to the matching policy's ID // Set policyNumberId to the matching policy's ID
@ -446,7 +495,7 @@ class _planclaimsformState extends State<planclaimsform> {
}); });
policyTypeCondition = filteredPolicies[0]['ticket_type_id']; policyTypeCondition = filteredPolicies[0]['ticket_type_id'];
client_policy_id = filteredPolicies[0]['client_policy_id']; // client_policy_id = filteredPolicies[0]['client_policy_id'];
print('Output : $policyTypeCondition'); // Output: GMC print('Output : $policyTypeCondition'); // Output: GMC
}); });
} else { } else {
@ -497,7 +546,7 @@ class _planclaimsformState extends State<planclaimsform> {
print('Filtered matching policy_no: $filteredPoliciesList'); print('Filtered matching policy_no: $filteredPoliciesList');
client_policy_id = filteredPoliciesList[0]['client_policy_id']; // client_policy_id = filteredPoliciesList[0]['client_policy_id'];
subjectController.text = filteredPoliciesList[0]['claim_subject']; subjectController.text = filteredPoliciesList[0]['claim_subject'];
@ -634,8 +683,8 @@ class _planclaimsformState extends State<planclaimsform> {
'policy_name': serviceId == 1 'policy_name': serviceId == 1
? null ? null
: (fromClaimsPage == 0 : (fromClaimsPage == 0
? claimsDetails['policy_name'] ? claimsDetails['policy_name']
: filteredPoliciesList[0]['policy_name']), : filteredPoliciesList[0]['policy_name']),
}; };
@ -643,6 +692,7 @@ class _planclaimsformState extends State<planclaimsform> {
if (policyTypeCondition == 1 || policyTypeCondition == 72) { if (policyTypeCondition == 1 || policyTypeCondition == 72) {
String formattedAdmitDate = DateFormat('yyyy-MM-dd').format(admitDate!); String formattedAdmitDate = DateFormat('yyyy-MM-dd').format(admitDate!);
String formattedDischargeDate = DateFormat('yyyy-MM-dd').format(dischargeDate!); String formattedDischargeDate = DateFormat('yyyy-MM-dd').format(dischargeDate!);
fields['claim_type'] = claimTypeId;
fields['hospital_name'] = hospitalNameController.text; fields['hospital_name'] = hospitalNameController.text;
fields['hospital_address'] = hospitalAddressController.text; fields['hospital_address'] = hospitalAddressController.text;
fields['hospital_city'] = hospitalCityController.text; fields['hospital_city'] = hospitalCityController.text;
@ -657,11 +707,11 @@ class _planclaimsformState extends State<planclaimsform> {
fields['insured_emp_id'] = selectedMemberId; fields['insured_emp_id'] = selectedMemberId;
} else { } else {
String formattedAccidentDate = String formattedAccidentDate =
DateFormat('yyyy-MM-dd').format(accidentDate!); DateFormat('yyyy-MM-dd').format(accidentDate!);
String formattedDeathDate = DateFormat('yyyy-MM-dd').format(deathDate!); String formattedDeathDate = DateFormat('yyyy-MM-dd').format(deathDate!);
String formattedBirthDate = DateFormat('yyyy-MM-dd').format(birthDate!); String formattedBirthDate = DateFormat('yyyy-MM-dd').format(birthDate!);
String formattedIntimationDate = String formattedIntimationDate =
DateFormat('yyyy-MM-dd').format(intimationDate!); DateFormat('yyyy-MM-dd').format(intimationDate!);
fields['date_of_accident'] = formattedAccidentDate; fields['date_of_accident'] = formattedAccidentDate;
fields['dob'] = formattedBirthDate; fields['dob'] = formattedBirthDate;
fields['date_of_intimat'] = formattedIntimationDate; fields['date_of_intimat'] = formattedIntimationDate;
@ -679,6 +729,7 @@ class _planclaimsformState extends State<planclaimsform> {
request.headers['Authorization'] = 'Bearer $_token'; request.headers['Authorization'] = 'Bearer $_token';
request.headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; request.headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y';
final stringFields = fields.map((key, value) => MapEntry(key, value?.toString() ?? '')); final stringFields = fields.map((key, value) => MapEntry(key, value?.toString() ?? ''));
print("📁 stringFields: ${stringFields}");
request.fields.addAll(stringFields); request.fields.addAll(stringFields);
// get uploaded files // get uploaded files
@ -894,14 +945,14 @@ class _planclaimsformState extends State<planclaimsform> {
vertical: MediaQuery.of(context).size.height * vertical: MediaQuery.of(context).size.height *
0.05, // 5% of screen height as vertical padding 0.05, // 5% of screen height as vertical padding
) )
: EdgeInsets.all(10), : EdgeInsets.all(10),
color: Colors.white, color: Colors.white,
child: Column(children: [ child: Column(children: [
Card( Card(
elevation: 5, elevation: 5,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: borderRadius:
BorderRadius.circular(15.0), // Set border radius here BorderRadius.circular(15.0), // Set border radius here
), ),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
@ -912,10 +963,10 @@ class _planclaimsformState extends State<planclaimsform> {
padding: Responsive.isDesktop(context) padding: Responsive.isDesktop(context)
? EdgeInsets.only(top: 15, bottom: 15, left: 15, right: 15) ? EdgeInsets.only(top: 15, bottom: 15, left: 15, right: 15)
: EdgeInsets.only( : EdgeInsets.only(
top: 10, top: 10,
bottom: 10, bottom: 10,
left: 10, left: 10,
right: 10), // Add padding to the container right: 10), // Add padding to the container
child: Row( child: Row(
children: [ children: [
Expanded( Expanded(
@ -935,22 +986,22 @@ class _planclaimsformState extends State<planclaimsform> {
), ),
padding: Responsive.isDesktop(context) padding: Responsive.isDesktop(context)
? EdgeInsets.only( ? EdgeInsets.only(
top: 20, top: 20,
bottom: 20, bottom: 20,
left: 0, left: 0,
right: 0) right: 0)
: EdgeInsets.only( : EdgeInsets.only(
top: 10, top: 10,
bottom: 10, bottom: 10,
left: 10, left: 10,
right: 10), right: 10),
child: Column( child: Column(
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.center, CrossAxisAlignment.center,
children: [ children: [
Row( Row(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.start, MainAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
flex: 1, flex: 1,
@ -966,26 +1017,26 @@ class _planclaimsformState extends State<planclaimsform> {
), ),
), ),
), ),
Expanded( Expanded(
flex: 11, flex: 11,
child: Row( child: Row(
mainAxisAlignment: mainAxisAlignment:
Responsive.isDesktop(context) Responsive.isDesktop(context)
? MainAxisAlignment.center ? MainAxisAlignment.center
: MainAxisAlignment.start, : MainAxisAlignment.start,
children: [ children: [
Text( Text(
fromClaimsPage == 0 fromClaimsPage == 0
? claimsDetails[ ? claimsDetails[
'policy_name'] 'policy_name']
: 'Raise a Request', : 'Raise a Request',
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: GoogleFonts.poppins( style: GoogleFonts.poppins(
fontSize: fontSize:
Responsive.isDesktop( Responsive.isDesktop(
context) context)
? 20 ? 20
: 16, : 16,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Color(0xFF000000), color: Color(0xFF000000),
), ),
@ -1005,16 +1056,16 @@ class _planclaimsformState extends State<planclaimsform> {
children: [ children: [
Column( Column(
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.start, CrossAxisAlignment.start,
children: [ children: [
Container( Container(
width: double.infinity, width: double.infinity,
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Column( child: Column(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.start, MainAxisAlignment.start,
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.start, CrossAxisAlignment.start,
children: [ children: [
Form( Form(
key: formKey, key: formKey,
@ -1107,6 +1158,32 @@ class _planclaimsformState extends State<planclaimsform> {
Text('Please select a policy', style: TextStyle(color: Colors.red)), Text('Please select a policy', style: TextStyle(color: Colors.red)),
], ],
), ),
SizedBox(height: 15),
if (policyTypeCondition == 1 || policyTypeCondition == 72)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildDropdownField(
'Select Claim Type',
(value) {
setState(() {
claimTypeId = value;
isClaimTypeValid = true;
});
},
false,
claimTypeList,
'name',
claimTypeId,
),
if (!isClaimTypeValid)
Text(
'Please select a claim type',
style: TextStyle(color: Colors.red),
),
],
),
// // if (fromClaimsPage == 1) // // if (fromClaimsPage == 1)
// buildDropdownField( // buildDropdownField(
@ -1168,7 +1245,7 @@ class _planclaimsformState extends State<planclaimsform> {
Text('Please select a member', style: TextStyle(color: Colors.red)), Text('Please select a member', style: TextStyle(color: Colors.red)),
], ],
), ),
SizedBox(height: 15), SizedBox(height: 15),
// buildDropdownField( // buildDropdownField(
// 'Member Name', // 'Member Name',
// (value) { // (value) {
@ -1192,7 +1269,7 @@ SizedBox(height: 15),
// 'name', // 'name',
// selectedMemberId, // Pass current selectedMemberId as selectedValue // selectedMemberId, // Pass current selectedMemberId as selectedValue
// ), // ),
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
// buildTextField('Subject', // buildTextField('Subject',
@ -1236,12 +1313,12 @@ SizedBox(height: 15),
Text('Please enter the Hospital Pincode', style: TextStyle(color: Colors.red)), Text('Please enter the Hospital Pincode', style: TextStyle(color: Colors.red)),
SizedBox(height: 15), SizedBox(height: 15),
buildTextField('Hospital Phone No', hospitalPhoneNoController, buildTextField('Hospital Phone No', hospitalPhoneNoController,
isRequired: true, isRequired: true,
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
inputFormatters: [ inputFormatters: [
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
LengthLimitingTextInputFormatter(10), LengthLimitingTextInputFormatter(10),
],minLength: 10,), ],minLength: 10,),
if (!isHospitalPhoneNoValid) if (!isHospitalPhoneNoValid)
Text( Text(
hospitalPhoneNoController.text.trim().isEmpty hospitalPhoneNoController.text.trim().isEmpty
@ -1368,9 +1445,9 @@ SizedBox(height: 15),
SizedBox(height: 15), SizedBox(height: 15),
if (serviceId == 1) ...[ if (serviceId == 1) ...[
buildTextField('Claims Amount', claimAmountController, isRequired: true, keyboardType: TextInputType.number, buildTextField('Claims Amount', claimAmountController, isRequired: true, keyboardType: TextInputType.number,
inputFormatters: [ inputFormatters: [
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
]), ]),
if (!isClaimAmountValid) if (!isClaimAmountValid)
Text('Please enter the Claims Amount', style: TextStyle(color: Colors.red)), Text('Please enter the Claims Amount', style: TextStyle(color: Colors.red)),
], ],
@ -1389,7 +1466,7 @@ SizedBox(height: 15),
], ],
), ),
] ]
), ),
SizedBox(height: 15), SizedBox(height: 15),
// ThemedUploadField( // ThemedUploadField(
// hintText: "Upload Documents", // hintText: "Upload Documents",
@ -1418,129 +1495,129 @@ SizedBox(height: 15),
], ],
), ),
), ),
], ],
),
SizedBox(height: 15),
Row(
children: [
Expanded(
flex: 12,
child: Container(
alignment: Alignment.centerRight,
child: ElevatedButton(
onPressed: () {
sendFormDataToApi();
},
child: isSubmitting
? SizedBox(
height: 22,
width: 22,
child: CircularProgressIndicator(
strokeWidth: 2,
color: Colors.white,
),
)
: Text(
'Send',
style: GoogleFonts.poppins(
color: Colors.white),
),
style: ElevatedButton.styleFrom(
backgroundColor:
Color(0xFFE26728),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(
5),
),
),
), ),
), SizedBox(height: 15),
Row(
children: [
Expanded(
flex: 12,
child: Container(
alignment: Alignment.centerRight,
child: ElevatedButton(
onPressed: () {
sendFormDataToApi();
},
child: isSubmitting
? SizedBox(
height: 22,
width: 22,
child: CircularProgressIndicator(
strokeWidth: 2,
color: Colors.white,
),
)
: Text(
'Send',
style: GoogleFonts.poppins(
color: Colors.white),
),
style: ElevatedButton.styleFrom(
backgroundColor:
Color(0xFFE26728),
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(
5),
),
),
),
),
),
],
),
],
), ),
], ),
), ],
], ))),
), ],
), ),
], ),
))), ),
], SizedBox(height: Responsive.isDesktop(context) ? 40 : 60),
), ]),
), )),
), if (isLoading)
SizedBox(height: Responsive.isDesktop(context) ? 40 : 60), Container(
]), color: Color(0x98FFFCE5), // Semi-transparent background
)), child: Center(
if (isLoading) child: // Your GIF loader widget
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Center(
child: // Your GIF loader widget
Image.asset( Image.asset(
height: 60, height: 60,
width: 60, width: 60,
'assets/nhance-loader.gif'), // Adjust path to your GIF loader 'assets/nhance-loader.gif'), // Adjust path to your GIF loader
), ),
),
if (Responsive.isDesktop(context))
Align(
alignment: Alignment.bottomCenter,
child: Container(
width: double.infinity, // Make the footer full width
child: CustomFooter(),
),
),
]),
// floatingActionButton: Responsive.isDesktop(context)
// ? null
// : FloatingActionButton(
// onPressed: () {
// Navigator.pushNamed(context, 'chatbot');
// },
// child: Icon(Icons.chat),
// ),
floatingActionButtonLocation: Responsive.isDesktop(context)
? null
: FloatingActionButtonLocation.miniEndFloat,
bottomNavigationBar: Responsive.isDesktop(context)
? null
: CustomBottomNavigationBar(
onTabChanged: (index) {
// Add your navigation logic here
// repositionBotman();
if (index == 0) {
context.push('/home');
} else if (index == 1) {
context.push('/claims');
} else if (index == 2) {
context.push('/faqs');
} else if (index == 3) {
context.push('/profile');
} else if (index == 4) {
context.push('/help');
}
// else if (index == 4) {
// // context.push('/wellness');
// // Wellness tab clicked show popup
// if(!isRetailLoggedIn)
// PopupHelper.showRedirectPopup(
// context: context,
// apiService: apiService,
// empPrimaryId: session.empPrimaryId,
// );
// }
},
icons: [
Icons.home_outlined,
Icons.sticky_note_2_outlined,
Icons.question_answer_outlined,
Icons.person_outline_outlined,
Icons.headset_mic_outlined,
],
labels: ["Home", "Claims", "FAQs", "Profile","Help"],
initialIndex: 0, // Initial index of the bottom navigation bar
), ),
if (Responsive.isDesktop(context)) )
Align(
alignment: Alignment.bottomCenter,
child: Container(
width: double.infinity, // Make the footer full width
child: CustomFooter(),
),
),
]),
// floatingActionButton: Responsive.isDesktop(context)
// ? null
// : FloatingActionButton(
// onPressed: () {
// Navigator.pushNamed(context, 'chatbot');
// },
// child: Icon(Icons.chat),
// ),
floatingActionButtonLocation: Responsive.isDesktop(context)
? null
: FloatingActionButtonLocation.miniEndFloat,
bottomNavigationBar: Responsive.isDesktop(context)
? null
: CustomBottomNavigationBar(
onTabChanged: (index) {
// Add your navigation logic here
// repositionBotman();
if (index == 0) {
context.push('/home');
} else if (index == 1) {
context.push('/claims');
} else if (index == 2) {
context.push('/faqs');
} else if (index == 3) {
context.push('/profile');
} else if (index == 4) {
context.push('/help');
}
// else if (index == 4) {
// // context.push('/wellness');
// // Wellness tab clicked show popup
// if(!isRetailLoggedIn)
// PopupHelper.showRedirectPopup(
// context: context,
// apiService: apiService,
// empPrimaryId: session.empPrimaryId,
// );
// }
},
icons: [
Icons.home_outlined,
Icons.sticky_note_2_outlined,
Icons.question_answer_outlined,
Icons.person_outline_outlined,
Icons.headset_mic_outlined,
],
labels: ["Home", "Claims", "FAQs", "Profile","Help"],
initialIndex: 0, // Initial index of the bottom navigation bar
),
)
); );
} }
@ -1663,7 +1740,7 @@ SizedBox(height: 15),
List<Map<String, dynamic>> itemsList, List<Map<String, dynamic>> itemsList,
String displayField, String displayField,
int? selectedValue, // Added selectedValue parameter int? selectedValue, // Added selectedValue parameter
{bool isRequired = false,} {bool isRequired = false,}
) { ) {
return DropdownButtonFormField<int>( return DropdownButtonFormField<int>(
value: selectedValue, value: selectedValue,

View File

@ -17,7 +17,7 @@ class ApiService {
} }
Future<void> _initializeToken() async { Future<void> _initializeToken() async {
_postToken = await TokenService.getPostToken(); _postToken = await TokenService.getPostToken();
} }
Future<Map<String, dynamic>> getActiveAndInactivePolicyDetails( Future<Map<String, dynamic>> getActiveAndInactivePolicyDetails(
@ -25,7 +25,8 @@ class ApiService {
String? empCode, String? empCode,
String? status, String? status,
String? branchID, String? branchID,
String? mobileNo,String? emailId) async { String? mobileNo,
String? emailId) async {
print(_postToken); print(_postToken);
if (_postToken == null) { if (_postToken == null) {
await _initializeToken(); await _initializeToken();
@ -61,7 +62,8 @@ class ApiService {
if (_postToken == null) { if (_postToken == null) {
await _initializeToken(); await _initializeToken();
} }
final url = Uri.parse('${Environment.apiUrl}getAdvertisementImage?client_id=$clientID'); final url = Uri.parse(
'${Environment.apiUrl}getAdvertisementImage?client_id=$clientID');
final headers = { final headers = {
'Authorization': 'Bearer $_postToken' ?? '', 'Authorization': 'Bearer $_postToken' ?? '',
}; };
@ -110,7 +112,8 @@ class ApiService {
return response; return response;
} }
Future<Map<String, dynamic>> getTrackClaimsList(String empPrimaryId,mobileNo,emailID) async { Future<Map<String, dynamic>> getTrackClaimsList(
String empPrimaryId, mobileNo, emailID) async {
print(_postToken); print(_postToken);
if (_postToken == null) { if (_postToken == null) {
await _initializeToken(); await _initializeToken();
@ -158,12 +161,14 @@ class ApiService {
return response; return response;
} }
Future<Map<String, dynamic>> getWellnessLink(empPrimaryId,client_policy_id) async { Future<Map<String, dynamic>> getWellnessLink(
empPrimaryId, client_policy_id) async {
print(_postToken); print(_postToken);
if (_postToken == null) { if (_postToken == null) {
await _initializeToken(); await _initializeToken();
} }
final url = Uri.parse('${Environment.apiUrl}getWellnessURL?emp_id=$empPrimaryId'); final url =
Uri.parse('${Environment.apiUrl}getWellnessURL?emp_id=$empPrimaryId');
// final url = Uri.parse('${Environment.apiUrl}getWellnessURL?emp_id=$empPrimaryId&client_policy_id=$client_policy_id'); // final url = Uri.parse('${Environment.apiUrl}getWellnessURL?emp_id=$empPrimaryId&client_policy_id=$client_policy_id');
final headers = { final headers = {
'Authorization': 'Bearer $_postToken' ?? '', 'Authorization': 'Bearer $_postToken' ?? '',
@ -184,7 +189,8 @@ class ApiService {
}; };
final jsonBody = jsonEncode(eCardParam); final jsonBody = jsonEncode(eCardParam);
// Send formDataJson as the body // Send formDataJson as the body
final response = await _makePostRequestWithoutFormData(url,jsonBody, headers); final response =
await _makePostRequestWithoutFormData(url, jsonBody, headers);
return response; return response;
} }
@ -200,7 +206,8 @@ class ApiService {
}; };
final jsonBody = jsonEncode(formData); final jsonBody = jsonEncode(formData);
// Send formDataJson as the body // Send formDataJson as the body
final response = await _makePostRequestWithoutFormData(url,jsonBody, headers); final response =
await _makePostRequestWithoutFormData(url, jsonBody, headers);
return response; return response;
} }
@ -227,7 +234,6 @@ class ApiService {
return response['status'] == 'success'; return response['status'] == 'success';
} }
Future<Map<String, dynamic>> fetchPolicyTypeAndInsurer() async { Future<Map<String, dynamic>> fetchPolicyTypeAndInsurer() async {
print(_postToken); print(_postToken);
if (_postToken == null) { if (_postToken == null) {
@ -241,12 +247,14 @@ class ApiService {
return response; return response;
} }
Future<Map<String, dynamic>> fetchDepartmentList(String clientId, String empCode) async { Future<Map<String, dynamic>> fetchDepartmentList(
String clientId, String empCode) async {
print(_postToken); print(_postToken);
if (_postToken == null) { if (_postToken == null) {
await _initializeToken(); await _initializeToken();
} }
final url = Uri.parse('${Environment.apiUrl}get_ticket_type?client_id=$clientId&emp_code=$empCode'); final url = Uri.parse(
'${Environment.apiUrl}get_ticket_type?client_id=$clientId&emp_code=$empCode');
final headers = { final headers = {
'Authorization': 'Bearer $_postToken' ?? '', 'Authorization': 'Bearer $_postToken' ?? '',
}; };
@ -374,7 +382,8 @@ class ApiService {
Future<Map<String, dynamic>> _makeGetRequest( Future<Map<String, dynamic>> _makeGetRequest(
Uri url, Map<String, String> headers) async { Uri url, Map<String, String> headers) async {
// Add global APP_SIGNATURE header // Add global APP_SIGNATURE header
headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; headers['APP-SIGNATURE'] =
'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y';
final response = await http.get(url, headers: headers); final response = await http.get(url, headers: headers);
return _handleResponse(response); return _handleResponse(response);
} }
@ -382,7 +391,8 @@ class ApiService {
Future<Map<String, dynamic>> _makePostRequest( Future<Map<String, dynamic>> _makePostRequest(
Uri url, Map<String, String> body, Map<String, String> headers) async { Uri url, Map<String, String> body, Map<String, String> headers) async {
// Add global APP_SIGNATURE header // Add global APP_SIGNATURE header
headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; headers['APP-SIGNATURE'] =
'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y';
final response = await http.post(url, headers: headers, body: body); final response = await http.post(url, headers: headers, body: body);
return _handleResponse(response); return _handleResponse(response);
} }
@ -390,24 +400,31 @@ class ApiService {
Future<Map<String, dynamic>> _makePostRequestWithoutFormData( Future<Map<String, dynamic>> _makePostRequestWithoutFormData(
Uri url, String body, Map<String, String> headers) async { Uri url, String body, Map<String, String> headers) async {
// Add global APP_SIGNATURE header // Add global APP_SIGNATURE header
headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; headers['APP-SIGNATURE'] =
'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y';
final response = await http.post(url, headers: headers, body: body); final response = await http.post(url, headers: headers, body: body);
return _handleResponse(response); return _handleResponse(response);
} }
Future<Map<String, dynamic>> _handleResponse(http.Response response) async { Future<Map<String, dynamic>> _handleResponse(http.Response response) async {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonDecode(response.body); return jsonDecode(response.body);
} else if (response.statusCode == 401) { } else if (response.statusCode == 401) {
await _clearLocalStorageAndRedirect(); await _clearLocalStorageAndRedirect();
return {}; return {};
} else if (response.statusCode == 429) { } else if (response.statusCode == 403) {
if (!context.mounted) return {}; await _clearLocalStorageAndRedirect();
final body = jsonDecode(response.body); return {};
} else if (response.statusCode == 451) {
final body = jsonDecode(response.body);
final message = body['message']; final message = body['message'];
ToastHelper.showWarningToast(context, message); ToastHelper.showWarningToast(context, message);
return {}; return {};
} else if (response.statusCode == 429) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
return {};
} else { } else {
throw Exception('Failed to load data'); throw Exception('Failed to load data');
} }

View File

@ -207,10 +207,28 @@
ToastHelper.showErrorToast(context, 'Invalid Pin Number'); ToastHelper.showErrorToast(context, 'Invalid Pin Number');
print('Invalid Pin Number'); print('Invalid Pin Number');
} }
} else { } else if (response.statusCode == 401) {
ToastHelper.showErrorToast(context, 'Something went wrong'); await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login'); context.go('/login');
throw Exception('Failed to verify pin number');
} else if (response.statusCode == 403) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else {
throw Exception('Failed to load data');
} }
} catch (e) { } catch (e) {
ToastHelper.showErrorToast(context, 'Something went wrong'); ToastHelper.showErrorToast(context, 'Something went wrong');
@ -425,9 +443,28 @@
// } // }
} }
} else if (response.statusCode == 401) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 403) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else { } else {
ToastHelper.showErrorToast(context, 'Something went wrong'); throw Exception('Failed to load data');
throw Exception('Failed to verify pin number');
} }
} catch (e) { } catch (e) {
// ToastHelper.showErrorToast(context, 'Something went wrong'); // ToastHelper.showErrorToast(context, 'Something went wrong');
@ -580,6 +617,7 @@
child: Column( child: Column(
// crossAxisAlignment: CrossAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox(height: 8),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [

View File

@ -12,6 +12,7 @@ import '../../config/environment.dart';
import '../../customAppBar/responsive.dart'; import '../../customAppBar/responsive.dart';
import '../../customAppBar/toastHelper.dart'; import '../../customAppBar/toastHelper.dart';
import '../postEnrollment/service/svg_service.dart'; import '../postEnrollment/service/svg_service.dart';
import '../service/SessionManager.dart';
import 'authenticationService.dart'; import 'authenticationService.dart';
class changePin extends StatefulWidget { class changePin extends StatefulWidget {
@ -107,11 +108,28 @@ class _changePinState extends State<changePin> {
ToastHelper.showErrorToast(context, message); ToastHelper.showErrorToast(context, message);
print('Invalid Pin Number'); print('Invalid Pin Number');
} }
} else if (response.statusCode == 401) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 403) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else { } else {
Map<String, dynamic> data = json.decode(response.body); throw Exception('Failed to load data');
String message = data['data']['message'];
ToastHelper.showErrorToast(context, message);
throw Exception('Failed to verify mobile number');
} }
} }
} catch (e) { } catch (e) {

View File

@ -166,9 +166,28 @@ class _pinSettingPageState extends State<pinSettingPage> {
ToastHelper.showErrorToast(context, message); ToastHelper.showErrorToast(context, message);
print('Invalid Pin Number'); print('Invalid Pin Number');
} }
} else if (response.statusCode == 401) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 403) {
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else { } else {
ToastHelper.showErrorToast(context, 'Something went wrong'); throw Exception('Failed to load data');
throw Exception('Failed to verify mobile number');
} }
// } // }
} catch (e) { } catch (e) {
@ -319,6 +338,7 @@ class _pinSettingPageState extends State<pinSettingPage> {
child: Column( child: Column(
// crossAxisAlignment: CrossAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox(height: 8),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [

View File

@ -118,12 +118,43 @@ class _setPasswordState extends State<setPassword> {
ToastHelper.showErrorToast(context, message!); ToastHelper.showErrorToast(context, message!);
print('Invalid mobile number'); print('Invalid mobile number');
} }
} else if (response.statusCode == 401) {
setState(() {
_isLoading = false;
});
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 403) {
setState(() {
_isLoading = false;
});
await SessionManager().clear();
ToastHelper.showErrorToast(context, 'Session Out');
if (!context.mounted) return;
context.go('/login');
} else if (response.statusCode == 451) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else if (response.statusCode == 429) {
setState(() {
_isLoading = false;
});
final body = jsonDecode(response.body);
final message = body['message'];
ToastHelper.showWarningToast(context, message);
} else { } else {
setState(() { setState(() {
_isLoading = false; _isLoading = false;
}); });
ToastHelper.showErrorToast(context, 'Something went wrong'); throw Exception('Failed to load data');
throw Exception('Failed to verify mobile number');
} }
} }
} catch (e) { } catch (e) {

View File

@ -17,8 +17,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
#version: 1.0.32+32 #version: 1.0.32+32
version: 1.0.29+34 version: 1.0.30+35
#version: 2.0.16+54 #version: 2.0.17+55
environment: environment:
sdk: '>=3.3.3 <4.0.0' sdk: '>=3.3.3 <4.0.0'