Merge branch 'master' of bitbucket.org:jubilian/post_enrollment_app
This commit is contained in:
commit
0e9b2ebf6d
@ -19,12 +19,12 @@ if (project.hasProperty('google-services.json')) {
|
||||
|
||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||
if (flutterVersionCode == null) {
|
||||
flutterVersionCode = '54'
|
||||
flutterVersionCode = '55'
|
||||
}
|
||||
|
||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
||||
if (flutterVersionName == null) {
|
||||
flutterVersionName = '2.0.16'
|
||||
flutterVersionName = '2.0.17'
|
||||
}
|
||||
|
||||
def keystoreProperties = new Properties()
|
||||
|
||||
@ -107,42 +107,73 @@ class _changesPasswordState extends State<changesPassword> {
|
||||
},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
Map<String, dynamic> data = json.decode(response.body);
|
||||
String? statusVerification = data['status'];
|
||||
String? message = data['message'];
|
||||
if (statusVerification == 'success') {
|
||||
final SharedPreferences prefs = await SharedPreferences
|
||||
.getInstance();
|
||||
await SessionManager().clear();
|
||||
await prefs.clear();
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
ToastHelper.showSuccessToast(context, message!);
|
||||
context.go('/login');
|
||||
} else {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
ToastHelper.showErrorToast(context, message!);
|
||||
print('Invalid mobile number');
|
||||
}
|
||||
} else {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
throw Exception('Failed to verify mobile number');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
// ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
print('Error: $e');
|
||||
}
|
||||
if (response.statusCode == 200) {
|
||||
Map<String, dynamic> data = json.decode(response.body);
|
||||
String? statusVerification = data['status'];
|
||||
String? message = data['message'];
|
||||
if (statusVerification == 'success') {
|
||||
final SharedPreferences prefs = await SharedPreferences
|
||||
.getInstance();
|
||||
await SessionManager().clear();
|
||||
await prefs.clear();
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
ToastHelper.showSuccessToast(context, message!);
|
||||
context.go('/login');
|
||||
} else {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
ToastHelper.showErrorToast(context, message!);
|
||||
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 {
|
||||
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
|
||||
// if (password.isEmpty) {
|
||||
|
||||
@ -268,13 +268,18 @@ class _MyEmailVerifyState extends State<MyEmailVerify> {
|
||||
String status = data['status'];
|
||||
|
||||
// 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');
|
||||
|
||||
_postToken = postToken;
|
||||
String postStatus = post['status'];
|
||||
|
||||
if (postStatus == 'success') {
|
||||
if (post != null && post['status'] == 'success') {
|
||||
setState(() {
|
||||
_isOtpVerified = true; // ✅ LOCK
|
||||
});
|
||||
@ -291,11 +296,43 @@ class _MyEmailVerifyState extends State<MyEmailVerify> {
|
||||
// Show a Snackbar if the OTP is invalid
|
||||
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 {
|
||||
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
prefs.clear();
|
||||
ToastHelper.showWarningToast(context, 'Something went wrong');
|
||||
throw Exception('Failed to verify OTP');
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
} catch (e) {
|
||||
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,
|
||||
children: [
|
||||
if (!Responsive.isMobile(context) &&
|
||||
!Responsive.isTablet(context))
|
||||
!Responsive.isTablet(context))...[
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 10,
|
||||
child: Align(
|
||||
alignment: Responsive
|
||||
.isDesktop(context)
|
||||
.isDesktop(context)
|
||||
? Alignment.center
|
||||
: Alignment
|
||||
.bottomCenter, // Align to the start
|
||||
.bottomCenter, // Align to the start
|
||||
child: _size.width <= 1100
|
||||
? Image.asset(
|
||||
'assets/nhance_app_logo.png',
|
||||
width: 150,
|
||||
height: 150,
|
||||
)
|
||||
'assets/nhance_app_logo.png',
|
||||
width: 150,
|
||||
height: 150,
|
||||
)
|
||||
: _size.width > 1100
|
||||
? Image.asset(
|
||||
'assets/nhance_app_logo.png',
|
||||
width: 150,
|
||||
height: 150,
|
||||
)
|
||||
: Image.asset(
|
||||
'assets/nhance_app_logo.png',
|
||||
width: 150,
|
||||
height: 150,
|
||||
),
|
||||
? Image.asset(
|
||||
'assets/nhance_app_logo.png',
|
||||
width: 150,
|
||||
height: 150,
|
||||
)
|
||||
: Image.asset(
|
||||
'assets/nhance_app_logo.png',
|
||||
width: 150,
|
||||
height: 150,
|
||||
),
|
||||
)),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
SizedBox(height: 10),
|
||||
],
|
||||
|
||||
// SizedBox(
|
||||
// height: Responsive.isDesktop(context)
|
||||
// ? _size.height * 0.1
|
||||
|
||||
@ -503,13 +503,18 @@ class ApiService {
|
||||
if (response.statusCode == 200) {
|
||||
return jsonDecode(response.body);
|
||||
} else if (response.statusCode == 401) {
|
||||
if (!_isSessionOutToastShown) {
|
||||
_isSessionOutToastShown = true;
|
||||
await _clearLocalStorageAndRedirect();
|
||||
}
|
||||
await _clearLocalStorageAndRedirect();
|
||||
return {};
|
||||
} 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 {};
|
||||
} else if (response.statusCode == 429) {
|
||||
final body = jsonDecode(response.body);
|
||||
final body = jsonDecode(response.body);
|
||||
final message = body['message'];
|
||||
ToastHelper.showWarningToast(context, message);
|
||||
return {};
|
||||
|
||||
@ -172,9 +172,35 @@ class _loginState extends State<login> {
|
||||
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
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 {
|
||||
ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
throw Exception('Failed to verify pin number');
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
} catch (e) {
|
||||
// ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
@ -1100,43 +1126,6 @@ class _loginState extends State<login> {
|
||||
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
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
@ -1269,8 +1269,8 @@ class _claimsState extends State<claims> {
|
||||
message:
|
||||
claimsSubject, // Full text shown on hover
|
||||
child: Text(
|
||||
claimsSubject.length > 30
|
||||
? '${claimsSubject.substring(0, 30)}...'
|
||||
claimsSubject.length > 20
|
||||
? '${claimsSubject.substring(0, 20)}...'
|
||||
: claimsSubject,
|
||||
textAlign: TextAlign.left,
|
||||
style: GoogleFonts.poppins(
|
||||
|
||||
@ -80,6 +80,10 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
final fileService = FileUploadService();
|
||||
bool isSubmitting = false;
|
||||
|
||||
Map<String, dynamic> claimTypeMap = {};
|
||||
List<Map<String, dynamic>> claimTypeList = [];
|
||||
int? claimTypeId;
|
||||
bool isClaimTypeValid = true;
|
||||
|
||||
// Declare subjectController and bodyController as instance variables
|
||||
late TextEditingController subjectController;
|
||||
@ -207,16 +211,20 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
print('fromClaimsPage $fromClaimsPage');
|
||||
}
|
||||
if (fromClaimsPage == 0) {
|
||||
claimSubject = claimsDetails['claim_subject'];
|
||||
print('claimSubject $claimSubject');
|
||||
claimsDepartmentId = claimsDetails['ticket_type_id'];
|
||||
rawPolicyStartDate = claimsDetails['policy_start_date'];
|
||||
print('rawPolicyStartDate $rawPolicyStartDate');
|
||||
rawPolicyEndDate = claimsDetails['claims_grace_date'];
|
||||
print('rawpolicyEndDate $rawPolicyEndDate');
|
||||
print('claimsDepartmentId $claimsDepartmentId');
|
||||
claimsPolicyNo = claimsDetails['policy_no'];
|
||||
client_policy_id = claimsDetails['client_policy_id'];
|
||||
setState(() {
|
||||
claimSubject = claimsDetails['claim_subject'];
|
||||
print('claimSubject $claimSubject');
|
||||
claimsDepartmentId = claimsDetails['ticket_type_id'];
|
||||
rawPolicyStartDate = claimsDetails['policy_start_date'];
|
||||
print('rawPolicyStartDate $rawPolicyStartDate');
|
||||
rawPolicyEndDate = claimsDetails['claims_grace_date'];
|
||||
print('rawpolicyEndDate $rawPolicyEndDate');
|
||||
print('claimsDepartmentId $claimsDepartmentId');
|
||||
claimsPolicyNo = claimsDetails['policy_no'];
|
||||
client_policy_id = claimsDetails['client_policy_id'];
|
||||
print('Current Client ID : ${client_policy_id}');
|
||||
});
|
||||
|
||||
// employeePolicyList = claimsDetails['EmployeePolicy'];
|
||||
// print('employeePolicyList : $employeePolicyList');
|
||||
List<dynamic> empList = claimsDetails['EmployeePolicy'];
|
||||
@ -286,11 +294,11 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
try {
|
||||
// Call both APIs
|
||||
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(
|
||||
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;
|
||||
@ -368,11 +376,23 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
// 'private': department['private'],
|
||||
};
|
||||
}).toList();
|
||||
|
||||
claimTypeMap = Map<String, dynamic>.from(response['claim_type']);
|
||||
isLoading = false;
|
||||
});
|
||||
// ✅ AUTO SELECT SERVICE = 1 (GMC)
|
||||
if (fromClaimsPage == 1 && departmentList.isNotEmpty) {
|
||||
serviceId = 1;
|
||||
loadClaimTypes(serviceId);
|
||||
}
|
||||
|
||||
if (fromClaimsPage == 0) {
|
||||
setInitialServiceId(departmentList);
|
||||
loadClaimTypes(claimsDepartmentId);
|
||||
}
|
||||
// if (fromClaimsPage == 0) {
|
||||
// setInitialServiceId(departmentList);
|
||||
// }
|
||||
} else {
|
||||
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) {
|
||||
if (policyList.isEmpty) {
|
||||
print('Policy list is empty. Ensure data is fetched before filtering.');
|
||||
@ -389,7 +438,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
setState(() {
|
||||
policyNumberId = null;
|
||||
policyTypeCondition = null;
|
||||
client_policy_id = null;
|
||||
// client_policy_id = null;
|
||||
});
|
||||
print('1111 serviceId : $serviceId');
|
||||
if (serviceId == 1 || serviceId == 2 || serviceId == 3 || serviceId == 4 || serviceId == 72) {
|
||||
@ -426,7 +475,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
if (fromClaimsPage == 0) {
|
||||
// Find the object where 'policy_no' matches 'claimsPolicyNo'
|
||||
final matchingPolicy = policyNumberList.firstWhere(
|
||||
(item) => item['policy_no'] == claimsPolicyNo,
|
||||
(item) => item['policy_no'] == claimsPolicyNo,
|
||||
orElse: () => {});
|
||||
|
||||
// Set policyNumberId to the matching policy's ID
|
||||
@ -446,7 +495,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
});
|
||||
|
||||
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
|
||||
});
|
||||
} else {
|
||||
@ -497,7 +546,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
|
||||
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'];
|
||||
|
||||
|
||||
@ -634,8 +683,8 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
'policy_name': serviceId == 1
|
||||
? null
|
||||
: (fromClaimsPage == 0
|
||||
? claimsDetails['policy_name']
|
||||
: filteredPoliciesList[0]['policy_name']),
|
||||
? claimsDetails['policy_name']
|
||||
: filteredPoliciesList[0]['policy_name']),
|
||||
|
||||
};
|
||||
|
||||
@ -643,6 +692,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
if (policyTypeCondition == 1 || policyTypeCondition == 72) {
|
||||
String formattedAdmitDate = DateFormat('yyyy-MM-dd').format(admitDate!);
|
||||
String formattedDischargeDate = DateFormat('yyyy-MM-dd').format(dischargeDate!);
|
||||
fields['claim_type'] = claimTypeId;
|
||||
fields['hospital_name'] = hospitalNameController.text;
|
||||
fields['hospital_address'] = hospitalAddressController.text;
|
||||
fields['hospital_city'] = hospitalCityController.text;
|
||||
@ -657,11 +707,11 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
fields['insured_emp_id'] = selectedMemberId;
|
||||
} else {
|
||||
String formattedAccidentDate =
|
||||
DateFormat('yyyy-MM-dd').format(accidentDate!);
|
||||
DateFormat('yyyy-MM-dd').format(accidentDate!);
|
||||
String formattedDeathDate = DateFormat('yyyy-MM-dd').format(deathDate!);
|
||||
String formattedBirthDate = DateFormat('yyyy-MM-dd').format(birthDate!);
|
||||
String formattedIntimationDate =
|
||||
DateFormat('yyyy-MM-dd').format(intimationDate!);
|
||||
DateFormat('yyyy-MM-dd').format(intimationDate!);
|
||||
fields['date_of_accident'] = formattedAccidentDate;
|
||||
fields['dob'] = formattedBirthDate;
|
||||
fields['date_of_intimat'] = formattedIntimationDate;
|
||||
@ -679,6 +729,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
request.headers['Authorization'] = 'Bearer $_token';
|
||||
request.headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y';
|
||||
final stringFields = fields.map((key, value) => MapEntry(key, value?.toString() ?? ''));
|
||||
print("📁 stringFields: ${stringFields}");
|
||||
request.fields.addAll(stringFields);
|
||||
|
||||
// get uploaded files
|
||||
@ -894,14 +945,14 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
vertical: MediaQuery.of(context).size.height *
|
||||
0.05, // 5% of screen height as vertical padding
|
||||
)
|
||||
: EdgeInsets.all(10),
|
||||
color: Colors.white,
|
||||
: EdgeInsets.all(10),
|
||||
color: Colors.white,
|
||||
child: Column(children: [
|
||||
Card(
|
||||
elevation: 5,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(15.0), // Set border radius here
|
||||
BorderRadius.circular(15.0), // Set border radius here
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
@ -912,10 +963,10 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
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
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
left: 10,
|
||||
right: 10), // Add padding to the container
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
@ -935,22 +986,22 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
),
|
||||
padding: Responsive.isDesktop(context)
|
||||
? EdgeInsets.only(
|
||||
top: 20,
|
||||
bottom: 20,
|
||||
left: 0,
|
||||
right: 0)
|
||||
top: 20,
|
||||
bottom: 20,
|
||||
left: 0,
|
||||
right: 0)
|
||||
: EdgeInsets.only(
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
left: 10,
|
||||
right: 10),
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
left: 10,
|
||||
right: 10),
|
||||
child: Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.center,
|
||||
CrossAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.start,
|
||||
MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 1,
|
||||
@ -966,26 +1017,26 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 11,
|
||||
child: Row(
|
||||
mainAxisAlignment:
|
||||
Responsive.isDesktop(context)
|
||||
? MainAxisAlignment.center
|
||||
: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
fromClaimsPage == 0
|
||||
? claimsDetails[
|
||||
Expanded(
|
||||
flex: 11,
|
||||
child: Row(
|
||||
mainAxisAlignment:
|
||||
Responsive.isDesktop(context)
|
||||
? MainAxisAlignment.center
|
||||
: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
fromClaimsPage == 0
|
||||
? claimsDetails[
|
||||
'policy_name']
|
||||
: 'Raise a Request',
|
||||
textAlign: TextAlign.start,
|
||||
style: GoogleFonts.poppins(
|
||||
fontSize:
|
||||
Responsive.isDesktop(
|
||||
: 'Raise a Request',
|
||||
textAlign: TextAlign.start,
|
||||
style: GoogleFonts.poppins(
|
||||
fontSize:
|
||||
Responsive.isDesktop(
|
||||
context)
|
||||
? 20
|
||||
: 16,
|
||||
? 20
|
||||
: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF000000),
|
||||
),
|
||||
@ -1005,16 +1056,16 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.start,
|
||||
MainAxisAlignment.start,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Form(
|
||||
key: formKey,
|
||||
@ -1107,6 +1158,32 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
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)
|
||||
// buildDropdownField(
|
||||
@ -1168,7 +1245,7 @@ class _planclaimsformState extends State<planclaimsform> {
|
||||
Text('Please select a member', style: TextStyle(color: Colors.red)),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
SizedBox(height: 15),
|
||||
// buildDropdownField(
|
||||
// 'Member Name',
|
||||
// (value) {
|
||||
@ -1192,7 +1269,7 @@ SizedBox(height: 15),
|
||||
// 'name',
|
||||
// selectedMemberId, // Pass current selectedMemberId as selectedValue
|
||||
// ),
|
||||
Column(
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
// buildTextField('Subject',
|
||||
@ -1236,12 +1313,12 @@ SizedBox(height: 15),
|
||||
Text('Please enter the Hospital Pincode', style: TextStyle(color: Colors.red)),
|
||||
SizedBox(height: 15),
|
||||
buildTextField('Hospital Phone No', hospitalPhoneNoController,
|
||||
isRequired: true,
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly,
|
||||
LengthLimitingTextInputFormatter(10),
|
||||
],minLength: 10,),
|
||||
isRequired: true,
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly,
|
||||
LengthLimitingTextInputFormatter(10),
|
||||
],minLength: 10,),
|
||||
if (!isHospitalPhoneNoValid)
|
||||
Text(
|
||||
hospitalPhoneNoController.text.trim().isEmpty
|
||||
@ -1368,9 +1445,9 @@ SizedBox(height: 15),
|
||||
SizedBox(height: 15),
|
||||
if (serviceId == 1) ...[
|
||||
buildTextField('Claims Amount', claimAmountController, isRequired: true, keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly,
|
||||
]),
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly,
|
||||
]),
|
||||
if (!isClaimAmountValid)
|
||||
Text('Please enter the Claims Amount', style: TextStyle(color: Colors.red)),
|
||||
],
|
||||
@ -1389,7 +1466,7 @@ SizedBox(height: 15),
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
// ThemedUploadField(
|
||||
// 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)
|
||||
Container(
|
||||
color: Color(0x98FFFCE5), // Semi-transparent background
|
||||
child: Center(
|
||||
child: // Your GIF loader widget
|
||||
),
|
||||
],
|
||||
))),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
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
|
||||
),
|
||||
),
|
||||
),
|
||||
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,
|
||||
String displayField,
|
||||
int? selectedValue, // Added selectedValue parameter
|
||||
{bool isRequired = false,}
|
||||
{bool isRequired = false,}
|
||||
) {
|
||||
return DropdownButtonFormField<int>(
|
||||
value: selectedValue,
|
||||
|
||||
@ -17,7 +17,7 @@ class ApiService {
|
||||
}
|
||||
|
||||
Future<void> _initializeToken() async {
|
||||
_postToken = await TokenService.getPostToken();
|
||||
_postToken = await TokenService.getPostToken();
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> getActiveAndInactivePolicyDetails(
|
||||
@ -25,7 +25,8 @@ class ApiService {
|
||||
String? empCode,
|
||||
String? status,
|
||||
String? branchID,
|
||||
String? mobileNo,String? emailId) async {
|
||||
String? mobileNo,
|
||||
String? emailId) async {
|
||||
print(_postToken);
|
||||
if (_postToken == null) {
|
||||
await _initializeToken();
|
||||
@ -61,7 +62,8 @@ class ApiService {
|
||||
if (_postToken == null) {
|
||||
await _initializeToken();
|
||||
}
|
||||
final url = Uri.parse('${Environment.apiUrl}getAdvertisementImage?client_id=$clientID');
|
||||
final url = Uri.parse(
|
||||
'${Environment.apiUrl}getAdvertisementImage?client_id=$clientID');
|
||||
final headers = {
|
||||
'Authorization': 'Bearer $_postToken' ?? '',
|
||||
};
|
||||
@ -110,7 +112,8 @@ class ApiService {
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> getTrackClaimsList(String empPrimaryId,mobileNo,emailID) async {
|
||||
Future<Map<String, dynamic>> getTrackClaimsList(
|
||||
String empPrimaryId, mobileNo, emailID) async {
|
||||
print(_postToken);
|
||||
if (_postToken == null) {
|
||||
await _initializeToken();
|
||||
@ -158,12 +161,14 @@ class ApiService {
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> getWellnessLink(empPrimaryId,client_policy_id) async {
|
||||
Future<Map<String, dynamic>> getWellnessLink(
|
||||
empPrimaryId, client_policy_id) async {
|
||||
print(_postToken);
|
||||
if (_postToken == null) {
|
||||
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 headers = {
|
||||
'Authorization': 'Bearer $_postToken' ?? '',
|
||||
@ -184,7 +189,8 @@ class ApiService {
|
||||
};
|
||||
final jsonBody = jsonEncode(eCardParam);
|
||||
// Send formDataJson as the body
|
||||
final response = await _makePostRequestWithoutFormData(url,jsonBody, headers);
|
||||
final response =
|
||||
await _makePostRequestWithoutFormData(url, jsonBody, headers);
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -200,7 +206,8 @@ class ApiService {
|
||||
};
|
||||
final jsonBody = jsonEncode(formData);
|
||||
// Send formDataJson as the body
|
||||
final response = await _makePostRequestWithoutFormData(url,jsonBody, headers);
|
||||
final response =
|
||||
await _makePostRequestWithoutFormData(url, jsonBody, headers);
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -227,7 +234,6 @@ class ApiService {
|
||||
return response['status'] == 'success';
|
||||
}
|
||||
|
||||
|
||||
Future<Map<String, dynamic>> fetchPolicyTypeAndInsurer() async {
|
||||
print(_postToken);
|
||||
if (_postToken == null) {
|
||||
@ -241,12 +247,14 @@ class ApiService {
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> fetchDepartmentList(String clientId, String empCode) async {
|
||||
Future<Map<String, dynamic>> fetchDepartmentList(
|
||||
String clientId, String empCode) async {
|
||||
print(_postToken);
|
||||
if (_postToken == null) {
|
||||
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 = {
|
||||
'Authorization': 'Bearer $_postToken' ?? '',
|
||||
};
|
||||
@ -374,7 +382,8 @@ class ApiService {
|
||||
Future<Map<String, dynamic>> _makeGetRequest(
|
||||
Uri url, Map<String, String> headers) async {
|
||||
// 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);
|
||||
return _handleResponse(response);
|
||||
}
|
||||
@ -382,7 +391,8 @@ class ApiService {
|
||||
Future<Map<String, dynamic>> _makePostRequest(
|
||||
Uri url, Map<String, String> body, Map<String, String> headers) async {
|
||||
// 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);
|
||||
return _handleResponse(response);
|
||||
}
|
||||
@ -390,24 +400,31 @@ class ApiService {
|
||||
Future<Map<String, dynamic>> _makePostRequestWithoutFormData(
|
||||
Uri url, String body, Map<String, String> headers) async {
|
||||
// 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);
|
||||
return _handleResponse(response);
|
||||
}
|
||||
|
||||
|
||||
Future<Map<String, dynamic>> _handleResponse(http.Response response) async {
|
||||
if (response.statusCode == 200) {
|
||||
return jsonDecode(response.body);
|
||||
} else if (response.statusCode == 401) {
|
||||
await _clearLocalStorageAndRedirect();
|
||||
return {};
|
||||
} else if (response.statusCode == 429) {
|
||||
if (!context.mounted) return {};
|
||||
final body = jsonDecode(response.body);
|
||||
} 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 {};
|
||||
} else if (response.statusCode == 429) {
|
||||
final body = jsonDecode(response.body);
|
||||
final message = body['message'];
|
||||
ToastHelper.showWarningToast(context, message);
|
||||
return {};
|
||||
} else {
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
|
||||
@ -207,10 +207,28 @@
|
||||
ToastHelper.showErrorToast(context, 'Invalid Pin Number');
|
||||
print('Invalid Pin Number');
|
||||
}
|
||||
} else {
|
||||
ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
} else if (response.statusCode == 401) {
|
||||
await SessionManager().clear();
|
||||
ToastHelper.showErrorToast(context, 'Session Out');
|
||||
if (!context.mounted) return;
|
||||
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) {
|
||||
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 {
|
||||
ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
throw Exception('Failed to verify pin number');
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
} catch (e) {
|
||||
// ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
@ -580,6 +617,7 @@
|
||||
child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
@ -12,6 +12,7 @@ import '../../config/environment.dart';
|
||||
import '../../customAppBar/responsive.dart';
|
||||
import '../../customAppBar/toastHelper.dart';
|
||||
import '../postEnrollment/service/svg_service.dart';
|
||||
import '../service/SessionManager.dart';
|
||||
import 'authenticationService.dart';
|
||||
|
||||
class changePin extends StatefulWidget {
|
||||
@ -107,11 +108,28 @@ class _changePinState extends State<changePin> {
|
||||
ToastHelper.showErrorToast(context, message);
|
||||
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 {
|
||||
Map<String, dynamic> data = json.decode(response.body);
|
||||
String message = data['data']['message'];
|
||||
ToastHelper.showErrorToast(context, message);
|
||||
throw Exception('Failed to verify mobile number');
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
@ -166,9 +166,28 @@ class _pinSettingPageState extends State<pinSettingPage> {
|
||||
ToastHelper.showErrorToast(context, message);
|
||||
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 {
|
||||
ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
throw Exception('Failed to verify mobile number');
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
// }
|
||||
} catch (e) {
|
||||
@ -319,6 +338,7 @@ class _pinSettingPageState extends State<pinSettingPage> {
|
||||
child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
@ -118,12 +118,43 @@ class _setPasswordState extends State<setPassword> {
|
||||
ToastHelper.showErrorToast(context, message!);
|
||||
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 {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
ToastHelper.showErrorToast(context, 'Something went wrong');
|
||||
throw Exception('Failed to verify mobile number');
|
||||
throw Exception('Failed to load data');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
@ -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
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
#version: 1.0.32+32
|
||||
version: 1.0.29+34
|
||||
#version: 2.0.16+54
|
||||
version: 1.0.30+35
|
||||
#version: 2.0.17+55
|
||||
|
||||
environment:
|
||||
sdk: '>=3.3.3 <4.0.0'
|
||||
|
||||
Loading…
Reference in New Issue
Block a user