Merge pull request 'family screen add fixes & remove & switch & widgets' (#79) from dev_aamir into master

Reviewed-on: #79
pull/82/head
Haroon6138 3 weeks ago
commit 5227fa6b58

@ -276,6 +276,7 @@ class ApiClientImp implements ApiClient {
logApiEndpointError(endPoint, parsed['ErrorSearchMsg'], statusCode); logApiEndpointError(endPoint, parsed['ErrorSearchMsg'], statusCode);
} }
} else { } else {
onFailure( onFailure(
parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'],
statusCode, statusCode,

@ -1,2 +1,6 @@
export '../routes/app_routes.dart'; export '../routes/app_routes.dart';
export 'utils/size_utils.dart'; export 'utils/size_utils.dart';

@ -149,13 +149,11 @@ class AuthenticationRepoImp implements AuthenticationRepo {
sendActivationCodeReq.isDentalAllowedBackend = false; sendActivationCodeReq.isDentalAllowedBackend = false;
final payload = sendActivationCodeReq.toJson(); final payload = sendActivationCodeReq.toJson();
if (isFormFamilyFile) { if (isFormFamilyFile) {
payload.remove("MobileNo"); payload.remove("MobileNo");
payload.remove("NationalID"); payload.remove("NationalID");
payload.remove("SMSSignature"); payload.remove("SMSSignature");
payload.remove("ResponseID"); // payload.remove("ResponseID");
print("=================== Final Payload ===================");
print(payload);
print("=====================================================");
} }
try { try {

@ -86,6 +86,7 @@ class AuthenticationViewModel extends ChangeNotifier {
LoginTypeEnum loginTypeEnum = LoginTypeEnum.sms; LoginTypeEnum loginTypeEnum = LoginTypeEnum.sms;
final ValueNotifier<bool> otpScreenNotifier = ValueNotifier<bool>(false); final ValueNotifier<bool> otpScreenNotifier = ValueNotifier<bool>(false);
int patientShareRequestID = 0;
//================== //==================
@ -346,15 +347,17 @@ class AuthenticationViewModel extends ChangeNotifier {
); );
} }
Future<void> sendActivationCode({required OTPTypeEnum otpTypeEnum, Future<void> sendActivationCode(
required String nationalIdOrFileNumber, {required OTPTypeEnum otpTypeEnum,
required String phoneNumber, required String nationalIdOrFileNumber,
required bool isForRegister, required String phoneNumber,
dynamic payload, required bool isForRegister,
bool isComingFromResendOTP = false, dynamic payload,
bool isExcludedUser = false, bool isComingFromResendOTP = false,
bool isFormFamilyFile = false, bool isExcludedUser = false,
int? responseID}) async { bool isFormFamilyFile = false,
bool isNeedLoading = false,
int? responseID}) async {
var request = RequestUtils.getCommonRequestSendActivationCode( var request = RequestUtils.getCommonRequestSendActivationCode(
otpTypeEnum: otpTypeEnum, otpTypeEnum: otpTypeEnum,
mobileNumber: phoneNumber, mobileNumber: phoneNumber,
@ -362,7 +365,7 @@ class AuthenticationViewModel extends ChangeNotifier {
zipCode: selectedCountrySignup.countryCode, zipCode: selectedCountrySignup.countryCode,
nationalId: int.parse(nationalIdOrFileNumber), nationalId: int.parse(nationalIdOrFileNumber),
isFileNo: isForRegister ? isPatientHasFile(request: payload) : false, isFileNo: isForRegister ? isPatientHasFile(request: payload) : false,
patientId: 0, patientId: isFormFamilyFile ? _appState.getAuthenticatedUser()!.patientId : 0,
isForRegister: isForRegister, isForRegister: isForRegister,
patientOutSA: isForRegister patientOutSA: isForRegister
? isPatientOutsideSA(request: payload) ? isPatientOutsideSA(request: payload)
@ -376,7 +379,9 @@ class AuthenticationViewModel extends ChangeNotifier {
// TODO: GET APP SMS SIGNATURE HERE // TODO: GET APP SMS SIGNATURE HERE
request.sMSSignature = await getSignature(); request.sMSSignature = await getSignature();
if (isNeedLoading) {
LoaderBottomSheet.showLoader();
}
if (checkIsUserComingForRegister(request: payload)) { if (checkIsUserComingForRegister(request: payload)) {
_appState.setUserRegistrationPayload = RegistrationDataModelPayload.fromJson(payload); _appState.setUserRegistrationPayload = RegistrationDataModelPayload.fromJson(payload);
} }
@ -387,9 +392,18 @@ class AuthenticationViewModel extends ChangeNotifier {
resultEither.fold( resultEither.fold(
(failure) async => await _errorHandlerService.handleError(failure: failure), (failure) async => await _errorHandlerService.handleError(failure: failure),
(apiResponse) async { (apiResponse) async {
int? patientShareRequestID = 0;
if (isFormFamilyFile) { if (isFormFamilyFile) {
if (apiResponse.data['PatientShareRequestID'] != null && apiResponse.data['PatientShareRequestID'] == 0 && apiResponse.messageStatus == 1) {
LoaderBottomSheet.hideLoader();
_dialogService.showErrorBottomSheet(
message: apiResponse.data["ErrorMessage"],
onOkPressed: () {
_navigationService.pop();
});
return;
}
patientShareRequestID = apiResponse.data['PatientShareRequestID']; patientShareRequestID = apiResponse.data['PatientShareRequestID'];
print("PatientShareRequestID ==============: $patientShareRequestID");
_appState.setFamilyFileTokenID = apiResponse.data['LogInTokenID']; _appState.setFamilyFileTokenID = apiResponse.data['LogInTokenID'];
} }
if (apiResponse.messageStatus == 2) { if (apiResponse.messageStatus == 2) {
@ -573,28 +587,29 @@ class AuthenticationViewModel extends ChangeNotifier {
} }
// _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); // _appState.setUserBloodGroup = (activation.patientBlodType ?? "");
_appState.setAppAuthToken = activation.authenticationTokenId; _appState.setAppAuthToken = activation.authenticationTokenId;
final request = await RequestUtils.getAuthanticatedCommonRequest().toJson(); final request = RequestUtils.getAuthanticatedCommonRequest().toJson();
bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request); bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request);
//updating the last login type in app state to show the fingerprint/face id option on home screen //updating the last login type in app state to show the fingerprint/face id option on home screen
if (_appState.getSelectDeviceByImeiRespModelElement != null) { if (_appState.getSelectDeviceByImeiRespModelElement != null) {
_appState.getSelectDeviceByImeiRespModelElement!.logInType = loginTypeEnum.toInt; _appState.getSelectDeviceByImeiRespModelElement!.logInType = loginTypeEnum.toInt;
} }
LoaderBottomSheet.hideLoader();
// //
if (!isSwitchUser && !_appState.getIsChildLoggedIn) { if (!isSwitchUser && !_appState.getIsChildLoggedIn) {
MedicalFileViewModel medicalVm = getIt<MedicalFileViewModel>(); MedicalFileViewModel medicalVm = getIt<MedicalFileViewModel>();
await insertPatientIMEIData(loginTypeEnum.toInt); insertPatientIMEIData(loginTypeEnum.toInt);
await medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan
await medicalVm.getAllPendingRecordsByResponseId(); medicalVm.getAllPendingRecordsByResponseId();
} }
await clearDefaultInputValues(); await clearDefaultInputValues();
if (isUserAgreedBefore) { if (isUserAgreedBefore) {
LoaderBottomSheet.hideLoader();
navigateToHomeScreen(); navigateToHomeScreen();
} else { } else {
MyAppointmentsViewModel myAppointmentsVM = getIt<MyAppointmentsViewModel>(); MyAppointmentsViewModel myAppointmentsVM = getIt<MyAppointmentsViewModel>();
myAppointmentsVM.setIsAppointmentDataToBeLoaded(true); myAppointmentsVM.setIsAppointmentDataToBeLoaded(true);
LoaderBottomSheet.hideLoader();
navigateToHomeScreen(); navigateToHomeScreen();
//Agreement page not designed yet so we are navigating to home screen directly //Agreement page not designed yet so we are navigating to home screen directly
// getUserAgreementContent(request: request); // getUserAgreementContent(request: request);
@ -944,6 +959,7 @@ class AuthenticationViewModel extends ChangeNotifier {
gender: _appState.getAuthenticatedUser()!.gender) gender: _appState.getAuthenticatedUser()!.gender)
.toJson()); .toJson());
resultEither.fold((failure) async => await _errorHandlerService.handleError(failure: failure), (apiResponse) async { resultEither.fold((failure) async => await _errorHandlerService.handleError(failure: failure), (apiResponse) async {
if (apiResponse.messageStatus == 2) {}
if (apiResponse.messageStatus == 1) { if (apiResponse.messageStatus == 1) {
log("Insert Device Data Success"); log("Insert Device Data Success");
} else { } else {

@ -298,9 +298,7 @@ class MedicalFileRepoImp implements MedicalFileRepo {
onSuccess: (response, statusCode, {messageStatus, errorMessage}) { onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try { try {
final list = response['GetAllSharedRecordsByStatusList']; final list = response['GetAllSharedRecordsByStatusList'];
// if (list == null || list.isEmpty) {
// throw Exception("lab list is empty");
// }
final familyLists = list.map((item) => FamilyFileResponseModelLists.fromJson(item as Map<String, dynamic>)).toList().cast<FamilyFileResponseModelLists>(); final familyLists = list.map((item) => FamilyFileResponseModelLists.fromJson(item as Map<String, dynamic>)).toList().cast<FamilyFileResponseModelLists>();

@ -287,7 +287,7 @@ class MedicalFileViewModel extends ChangeNotifier {
), ),
(apiResponse) { (apiResponse) {
if (apiResponse.messageStatus == 2) { if (apiResponse.messageStatus == 2) {
_dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); // _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) { } else if (apiResponse.messageStatus == 1) {
if (apiResponse.data != null) { if (apiResponse.data != null) {
// Add current user as the first active family file // Add current user as the first active family file
@ -385,7 +385,7 @@ class MedicalFileViewModel extends ChangeNotifier {
(failure) async => await errorHandlerService.handleError(failure: failure), (failure) async => await errorHandlerService.handleError(failure: failure),
(apiResponse) { (apiResponse) {
if (apiResponse.messageStatus == 2) { if (apiResponse.messageStatus == 2) {
_dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); // _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) { } else if (apiResponse.messageStatus == 1) {
if (apiResponse.data != null) { if (apiResponse.data != null) {
final List<FamilyFileResponseModelLists> tempPendingFamilyFiles = []; final List<FamilyFileResponseModelLists> tempPendingFamilyFiles = [];
@ -439,6 +439,9 @@ class MedicalFileViewModel extends ChangeNotifier {
); );
} }
Future<void> addFamilyFile({required OTPTypeEnum otpTypeEnum}) async { Future<void> addFamilyFile({required OTPTypeEnum otpTypeEnum}) async {
LoaderBottomSheet.showLoader(); LoaderBottomSheet.showLoader();
AuthenticationViewModel authVM = getIt.get<AuthenticationViewModel>(); AuthenticationViewModel authVM = getIt.get<AuthenticationViewModel>();
@ -449,6 +452,7 @@ class MedicalFileViewModel extends ChangeNotifier {
final resultEither = await medicalFileRepo.addFamilyFile(request: request.toJson()); final resultEither = await medicalFileRepo.addFamilyFile(request: request.toJson());
resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async { resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async {
if (apiResponse.messageStatus == 2) { if (apiResponse.messageStatus == 2) {
print("=======");
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
_dialogService.showErrorBottomSheet( _dialogService.showErrorBottomSheet(
message: apiResponse.errorMessage!, message: apiResponse.errorMessage!,
@ -463,7 +467,7 @@ class MedicalFileViewModel extends ChangeNotifier {
_dialogService.showExceptionBottomSheet( _dialogService.showExceptionBottomSheet(
message: apiResponse.data["Message"], message: apiResponse.data["Message"],
onOkPressed: () { onOkPressed: () {
LoaderBottomSheet.showLoader(); navigationService.pop();
authVM.sendActivationCode( authVM.sendActivationCode(
otpTypeEnum: otpTypeEnum, otpTypeEnum: otpTypeEnum,
nationalIdOrFileNumber: request.sharedPatientIdentificationId!, nationalIdOrFileNumber: request.sharedPatientIdentificationId!,
@ -471,6 +475,7 @@ class MedicalFileViewModel extends ChangeNotifier {
isForRegister: false, isForRegister: false,
isExcludedUser: apiResponse.data['IsPatientExcluded'], isExcludedUser: apiResponse.data['IsPatientExcluded'],
responseID: apiResponse.data["ReponseID"], responseID: apiResponse.data["ReponseID"],
isNeedLoading: true,
isFormFamilyFile: true); isFormFamilyFile: true);
}, },
onCancelPressed: () { onCancelPressed: () {
@ -510,6 +515,8 @@ class MedicalFileViewModel extends ChangeNotifier {
}); });
} else if (apiResponse.messageStatus == 1) { } else if (apiResponse.messageStatus == 1) {
patientFamilyFiles.removeWhere((element) => element.id == id); patientFamilyFiles.removeWhere((element) => element.id == id);
getFamilyFiles();
getAllPendingRecordsByResponseId();
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
notifyListeners(); notifyListeners();
navigationService.pop(); navigationService.pop();
@ -575,11 +582,11 @@ class MedicalFileViewModel extends ChangeNotifier {
(apiResponse) { (apiResponse) {
if (apiResponse.messageStatus == 2) { if (apiResponse.messageStatus == 2) {
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
_dialogService.showErrorBottomSheet( // _dialogService.showErrorBottomSheet(
message: apiResponse.errorMessage!, // message: apiResponse.errorMessage!,
onOkPressed: () { // onOkPressed: () {
navigationService.pop(); // navigationService.pop();
}); // });
} else if (apiResponse.messageStatus == 1) { } else if (apiResponse.messageStatus == 1) {
// FamilyFileResponseModelLists moveProfile = pendingFamilyFiles.firstWhere((element) => element.id == patientID); // FamilyFileResponseModelLists moveProfile = pendingFamilyFiles.firstWhere((element) => element.id == patientID);
// moveProfile.status = 3; // moveProfile.status = 3;

@ -53,7 +53,7 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
AppState appState = getIt.get<AppState>(); AppState appState = getIt.get<AppState>();
return CollapsingListView( return CollapsingListView(
title: "My Medical File".needTranslation, title: "Medical Files".needTranslation,
bottomChild: appState.getAuthenticatedUser()!.isParentUser! bottomChild: appState.getAuthenticatedUser()!.isParentUser!
? Container( ? Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration( decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
@ -82,17 +82,17 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
CustomTabBar( appState.isChildLoggedIn
activeBackgroundColor: AppColors.secondaryLightRedColor, ? SizedBox()
activeTextColor: AppColors.primaryRedColor, : CustomTabBar(
tabs: appState.isChildLoggedIn activeBackgroundColor: AppColors.secondaryLightRedColor,
? [CustomTabBarModel(null, LocaleKeys.medicalFile.tr())] activeTextColor: AppColors.primaryRedColor,
: [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())], tabs: [CustomTabBarModel(null, LocaleKeys.family.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())],
onTabChange: (index) { onTabChange: (index) {
medicalVM!.onFamilyFileTabChange(index); medicalVM!.onFamilyFileTabChange(index);
}, },
), ),
SizedBox(height: 25.h), appState.isChildLoggedIn ? SizedBox() : SizedBox(height: 25.h),
Selector<MedicalFileViewModel, int>(selector: (_, model) => model.getSelectedFamilyFileTabIndex, builder: (context, selectedIndex, child) => getFamilyTabs(index: selectedIndex)), Selector<MedicalFileViewModel, int>(selector: (_, model) => model.getSelectedFamilyFileTabIndex, builder: (context, selectedIndex, child) => getFamilyTabs(index: selectedIndex)),
SizedBox(height: 20.h), SizedBox(height: 20.h),
], ],

@ -67,68 +67,70 @@ class _FamilyCardsState extends State<FamilyCards> {
], ],
), ),
SizedBox(height: 24.h), SizedBox(height: 24.h),
ListView.builder( widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).isEmpty
shrinkWrap: true, ? Utils.getNoDataWidget(context)
physics: NeverScrollableScrollPhysics(), : ListView.builder(
padding: EdgeInsets.zero, shrinkWrap: true,
itemCount: widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).length, physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) { padding: EdgeInsets.zero,
final mySideProfiles = widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).toList(); itemCount: widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).length,
FamilyFileResponseModelLists profile = mySideProfiles[index]; itemBuilder: (context, index) {
return Container( final mySideProfiles = widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).toList();
margin: EdgeInsets.only(bottom: 12.h), FamilyFileResponseModelLists profile = mySideProfiles[index];
padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), return Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), margin: EdgeInsets.only(bottom: 12.h),
child: Opacity( padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h),
opacity: 1.0, decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24),
child: Column( child: Opacity(
mainAxisSize: MainAxisSize.min, opacity: 1.0,
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min,
children: [ crossAxisAlignment: CrossAxisAlignment.start,
CustomChipWidget( mainAxisAlignment: MainAxisAlignment.start,
height: 30.h, children: [
chipType: ChipTypeEnum.alert, CustomChipWidget(
backgroundColor: profile.status == FamilyFileEnum.pending.toInt height: 30.h,
? AppColors.alertLightColor.withValues(alpha: 0.20) chipType: ChipTypeEnum.alert,
: profile.status == FamilyFileEnum.rejected.toInt backgroundColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.primaryRedColor.withValues(alpha: 0.20) ? AppColors.alertLightColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.active.toInt : profile.status == FamilyFileEnum.rejected.toInt
? AppColors.lightGreenColor ? AppColors.primaryRedColor.withValues(alpha: 0.20)
: AppColors.lightGrayBGColor, : profile.status == FamilyFileEnum.active.toInt
chipText: profile.statusDescription ?? "N/A", ? AppColors.lightGreenColor
iconAsset: null, : AppColors.lightGrayBGColor,
isShowBorder: false, chipText: profile.statusDescription ?? "N/A",
borderRadius: 8.h, iconAsset: null,
textColor: profile.status == FamilyFileEnum.pending.toInt isShowBorder: false,
? AppColors.alertLightColor borderRadius: 8.h,
: profile.status == FamilyFileEnum.rejected.toInt textColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.primaryRedColor ? AppColors.alertLightColor
: profile.status == FamilyFileEnum.active.toInt : profile.status == FamilyFileEnum.rejected.toInt
? AppColors.textGreenColor ? AppColors.primaryRedColor
: AppColors.alertColor), : profile.status == FamilyFileEnum.active.toInt
SizedBox(height: 8.h), ? AppColors.textGreenColor
Wrap(alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, runAlignment: WrapAlignment.start, spacing: 0.h, children: [ : AppColors.alertColor),
(profile.patientName ?? "").toText14(isBold: false, isCenter: false, maxlines: 1, weight: FontWeight.w600), SizedBox(height: 8.h),
(getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)) Wrap(alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, runAlignment: WrapAlignment.start, spacing: 0.h, children: [
.toText12(isBold: false, isCenter: false, maxLine: 1, fontWeight: FontWeight.w500, color: AppColors.greyTextColor), (profile.patientName ?? "").toText14(isBold: false, isCenter: false, maxlines: 1, weight: FontWeight.w600),
]), (getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false))
SizedBox(height: 8.h), .toText12(isBold: false, isCenter: false, maxLine: 1, fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
CustomChipWidget( ]),
height: 30.h, SizedBox(height: 8.h),
chipType: ChipTypeEnum.alert, CustomChipWidget(
backgroundColor: AppColors.lightGrayBGColor, height: 30.h,
chipText: "Medical File: ${profile.responseId ?? "N/A"}", chipType: ChipTypeEnum.alert,
iconAsset: null, backgroundColor: AppColors.lightGrayBGColor,
isShowBorder: false, chipText: "Medical File: ${profile.responseId ?? "N/A"}",
borderRadius: 8.h, iconAsset: null,
textColor: AppColors.textColor), isShowBorder: false,
], borderRadius: 8.h,
), textColor: AppColors.textColor),
],
),
),
);
},
), ),
);
},
),
SizedBox(height: 20.h), SizedBox(height: 20.h),
], ],
); );
@ -231,115 +233,118 @@ class _FamilyCardsState extends State<FamilyCards> {
Widget manageFamily() { Widget manageFamily() {
NavigationService navigationService = getIt<NavigationService>(); NavigationService navigationService = getIt<NavigationService>();
return ListView.builder(
shrinkWrap: true, return widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).isEmpty
physics: NeverScrollableScrollPhysics(), ? Utils.getNoDataWidget(context)
padding: EdgeInsetsGeometry.zero, : ListView.builder(
itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length, shrinkWrap: true,
itemBuilder: (context, index) { physics: NeverScrollableScrollPhysics(),
final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList(); padding: EdgeInsetsGeometry.zero,
FamilyFileResponseModelLists profile = otherProfiles[index]; itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length,
return Container( itemBuilder: (context, index) {
margin: EdgeInsets.only(bottom: 12.h), final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList();
padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), FamilyFileResponseModelLists profile = otherProfiles[index];
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), return Container(
child: Opacity( margin: EdgeInsets.only(bottom: 12.h),
opacity: 1.0, padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h),
child: Column( decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24),
mainAxisSize: MainAxisSize.min, child: Opacity(
crossAxisAlignment: CrossAxisAlignment.start, opacity: 1.0,
mainAxisAlignment: MainAxisAlignment.start, child: Column(
children: [ mainAxisSize: MainAxisSize.min,
CustomChipWidget( crossAxisAlignment: CrossAxisAlignment.start,
height: 30.h, mainAxisAlignment: MainAxisAlignment.start,
chipType: ChipTypeEnum.alert, children: [
backgroundColor: profile.status == FamilyFileEnum.pending.toInt CustomChipWidget(
? AppColors.alertLightColor.withValues(alpha: 0.20) height: 30.h,
: profile.status == FamilyFileEnum.rejected.toInt chipType: ChipTypeEnum.alert,
? AppColors.primaryRedColor.withValues(alpha: 0.20) backgroundColor: profile.status == FamilyFileEnum.pending.toInt
: profile.status == FamilyFileEnum.active.toInt ? AppColors.alertLightColor.withValues(alpha: 0.20)
? AppColors.lightGreenColor : profile.status == FamilyFileEnum.rejected.toInt
: AppColors.lightGrayBGColor, ? AppColors.primaryRedColor.withValues(alpha: 0.20)
chipText: profile.statusDescription ?? "N/A", : profile.status == FamilyFileEnum.active.toInt
iconAsset: null, ? AppColors.lightGreenColor
isShowBorder: false, : AppColors.lightGrayBGColor,
borderRadius: 8.h, chipText: profile.statusDescription ?? "N/A",
textColor: profile.status == FamilyFileEnum.pending.toInt iconAsset: null,
? AppColors.alertLightColor isShowBorder: false,
: profile.status == FamilyFileEnum.rejected.toInt borderRadius: 8.h,
? AppColors.primaryRedColor textColor: profile.status == FamilyFileEnum.pending.toInt
: profile.status == FamilyFileEnum.active.toInt ? AppColors.alertLightColor
? AppColors.textGreenColor : profile.status == FamilyFileEnum.rejected.toInt
: AppColors.alertColor, ? AppColors.primaryRedColor
), : profile.status == FamilyFileEnum.active.toInt
SizedBox(height: 8.h), ? AppColors.textGreenColor
Wrap( : AppColors.alertColor,
alignment: WrapAlignment.start, ),
children: [ SizedBox(height: 8.h),
(profile.patientName ?? "").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), Wrap(
(getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)).toText14( alignment: WrapAlignment.start,
isBold: false, children: [
isCenter: true, (profile.patientName ?? "").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600),
maxlines: 1, (getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)).toText14(
weight: FontWeight.w500, isBold: false,
color: AppColors.greyTextColor, isCenter: true,
), maxlines: 1,
], weight: FontWeight.w500,
), color: AppColors.greyTextColor,
SizedBox(height: 8.h), ),
CustomChipWidget( ],
height: 30.h, ),
chipType: ChipTypeEnum.alert, SizedBox(height: 8.h),
backgroundColor: AppColors.lightGrayBGColor, CustomChipWidget(
chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}", height: 30.h,
iconAsset: null, chipType: ChipTypeEnum.alert,
isShowBorder: false, backgroundColor: AppColors.lightGrayBGColor,
borderRadius: 8.h, chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}",
textColor: AppColors.textColor, iconAsset: null,
), isShowBorder: false,
SizedBox(height: 16.h), borderRadius: 8.h,
Row( textColor: AppColors.textColor,
children: [ ),
profile.status == FamilyFileEnum.active.toInt SizedBox(height: 16.h),
? SizedBox() Row(
: Expanded( children: [
profile.status == FamilyFileEnum.active.toInt
? SizedBox()
: Expanded(
child: CustomButton(
height: 40.h,
text: LocaleKeys.confirm.tr(),
onPressed: () {
navigationService.pop();
widget.onSelect(profile);
},
backgroundColor: AppColors.lightGreenButtonColor,
borderColor: AppColors.lightGreenButtonColor,
textColor: AppColors.textGreenColor,
icon: null,
),
),
profile.status == FamilyFileEnum.active.toInt ? SizedBox() : SizedBox(width: 8.h),
Expanded(
child: CustomButton( child: CustomButton(
height: 40.h, height: 40.h,
text: LocaleKeys.confirm.tr(), text: profile.status == FamilyFileEnum.active.toInt ? LocaleKeys.removeMember.tr() : LocaleKeys.cancel.tr(),
onPressed: () { onPressed: () {
navigationService.pop(); navigationService.pop();
widget.onSelect(profile); widget.onRemove(profile);
}, },
backgroundColor: AppColors.lightGreenButtonColor, backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.lightGreenButtonColor, borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.textGreenColor, textColor: AppColors.primaryRedColor,
icon: null, icon: null,
iconColor: AppColors.primaryRedColor,
), ),
), ),
profile.status == FamilyFileEnum.active.toInt ? SizedBox() : SizedBox(width: 8.h), ],
Expanded(
child: CustomButton(
height: 40.h,
text: profile.status == FamilyFileEnum.active.toInt ? LocaleKeys.removeMember.tr() : LocaleKeys.cancel.tr(),
onPressed: () {
navigationService.pop();
widget.onRemove(profile);
},
backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor,
icon: null,
iconColor: AppColors.primaryRedColor,
), ),
), ],
], ),
), ),
], );
), },
), );
);
},
);
} }
String getStatusTextByRequest(FamilyFileEnum status, bool isRequestFromMySide) { String getStatusTextByRequest(FamilyFileEnum status, bool isRequestFromMySide) {

@ -301,11 +301,13 @@ class FamilyCardWidget extends StatelessWidget {
runSpacing: 4.h, runSpacing: 4.h,
children: [ children: [
AppCustomChipWidget(labelText: "${profile.age} Years Old".needTranslation), AppCustomChipWidget(labelText: "${profile.age} Years Old".needTranslation),
AppCustomChipWidget( isActive && appState.getAuthenticatedUser()!.bloodGroup != null
icon: AppAssets.blood_icon, ? AppCustomChipWidget(
labelPadding: EdgeInsetsDirectional.only(start: -6.h, end: 8.h), icon: AppAssets.blood_icon,
labelText: "Blood: ${appState.getAuthenticatedUser()!.bloodGroup ?? "."}", labelPadding: EdgeInsetsDirectional.only(start: -6.h, end: 8.h),
iconColor: AppColors.primaryRedColor), labelText: "Blood: ${appState.getAuthenticatedUser()!.bloodGroup ?? ""}",
iconColor: AppColors.primaryRedColor)
: SizedBox(),
Selector<InsuranceViewModel, ({bool isEmpty, int? patientID, bool isLoading, String? cardValidTo})>( Selector<InsuranceViewModel, ({bool isEmpty, int? patientID, bool isLoading, String? cardValidTo})>(
selector: (context, insuranceVM) => ( selector: (context, insuranceVM) => (
isEmpty: insuranceVM.patientInsuranceList.isEmpty, isEmpty: insuranceVM.patientInsuranceList.isEmpty,
@ -330,7 +332,7 @@ class FamilyCardWidget extends StatelessWidget {
if (isLoading) { if (isLoading) {
icon = AppAssets.cancel_circle_icon; icon = AppAssets.cancel_circle_icon;
labelText = "Insurance"; labelText = "Insurance".needTranslation;
iconColor = AppColors.primaryRedColor; iconColor = AppColors.primaryRedColor;
backgroundColor = AppColors.primaryRedColor; backgroundColor = AppColors.primaryRedColor;
} else if (isExpired) { } else if (isExpired) {
@ -356,82 +358,6 @@ class FamilyCardWidget extends StatelessWidget {
).toShimmer2(isShow: isLoading); ).toShimmer2(isShow: isLoading);
}, },
) )
// Consumer<InsuranceViewModel>(builder: (context, insuranceVM, child) {
// if (insuranceVM.patientInsuranceList.isEmpty) {
// return const SizedBox();
// } else if (profile.responseId != insuranceVM.patientInsuranceList.first.patientID) {
// return SizedBox();
// }
//
// final isLoading = insuranceVM.isInsuranceLoading;
// final isExpired = !isLoading && DateTime.now().isAfter(DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo));
//
// final String icon;
// final String labelText;
// final Color iconColor;
// final Color backgroundColor;
//
// if (isLoading) {
// icon = AppAssets.cancel_circle_icon;
// labelText = "Insurance";
// iconColor = AppColors.primaryRedColor;
// backgroundColor = AppColors.primaryRedColor;
// } else if (isExpired) {
// icon = AppAssets.cancel_circle_icon;
// labelText = "Insurance Expired".needTranslation;
// iconColor = AppColors.primaryRedColor;
// backgroundColor = AppColors.primaryRedColor.withValues(alpha: 0.15);
// } else {
// icon = AppAssets.insurance_active_icon;
// labelText = "Insurance Active".needTranslation;
// iconColor = AppColors.successColor;
// backgroundColor = AppColors.successColor.withValues(alpha: 0.15);
// }
//
// return AppCustomChipWidget(
// icon: icon,
// labelText: labelText,
// iconColor: iconColor,
// iconSize: 12,
// backgroundColor: backgroundColor,
// // padding: EdgeInsets.zero,
// ).toShimmer2(isShow: isLoading);
// })
// Consumer<InsuranceViewModel>(builder: (context, insuranceVM, child) {
// return insuranceVM.patientInsuranceList. isNotEmpty ? AppCustomChipWidget(
// icon: insuranceVM.isInsuranceLoading
// ? AppAssets.cancel_circle_icon
// : (DateTime.now().isAfter(
// DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo),
// ))
// ? AppAssets.cancel_circle_icon
// : AppAssets.insurance_active_icon,
// labelText: insuranceVM.isInsuranceLoading
// ? "Insurance"
// : (DateTime.now().isAfter(
// DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo),
// )
// ? "Insurance Expired".needTranslation
// : "Insurance Active".needTranslation),
// iconColor: insuranceVM.isInsuranceLoading
// ? AppColors.primaryRedColor
// : (DateTime.now().isAfter(
// DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo),
// ))
// ? AppColors.primaryRedColor
// : AppColors.successColor,
// iconSize: 14,
// backgroundColor: insuranceVM.isInsuranceLoading
// ? AppColors.primaryRedColor
// : (DateTime.now().isAfter(
// DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo),
// ))
// ? AppColors.primaryRedColor.withValues(alpha: 0.15)
// : AppColors.successColor.withValues(alpha: 0.15),
// ).toShimmer2(isShow: insuranceVM.isInsuranceLoading) : SizedBox();
// }),
], ],
), ),
), ),
@ -439,49 +365,6 @@ class FamilyCardWidget extends StatelessWidget {
).paddingOnly(top: 16.h, right: 16.h, left: 16.h, bottom: 12.h).expanded, ).paddingOnly(top: 16.h, right: 16.h, left: 16.h, bottom: 12.h).expanded,
1.divider, 1.divider,
_buildActionButton(appState), _buildActionButton(appState),
// if (appState.getAuthenticatedUser()!.isParentUser ?? false) ...[
// if (member!.responseId != appState.getAuthenticatedUser()!.patientId) ...[
// CustomButton(
// icon: AppAssets.switch_user,
// text: "Switch Family File".needTranslation,
// onPressed: () {
// onFamilySwitchPress(member!);
// },
// ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16),
// ] else
// ...[
// CustomButton(
// icon: AppAssets.add_family,
// text: "Add a new family member".needTranslation,
// onPressed: () {
// onAddFamilyMemberPress();
// },
// ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16),
// ]
// ] else
// ...[
// if (appState.getSuperUserID != null && appState.getSuperUserID == member!.responseId) ...[
// CustomButton(
// icon: AppAssets.switch_user,
// text: "Switch Back To Family File".needTranslation,
// onPressed: () {
// onFamilySwitchPress(member!);
// },
// ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16),
// ] else
// ...[
// CustomButton(
// icon: AppAssets.switch_user,
// text: "Disabled".needTranslation,
// backgroundColor: Colors.grey.shade200,
// borderColor: Colors.grey.shade200,
// textColor: AppColors.greyTextColor,
// onPressed: () {},
// iconColor: AppColors.greyTextColor,
// ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16),
// ]
// ]
], ],
), ),
); );

@ -59,6 +59,8 @@ class DialogServiceImp implements DialogService {
onOkPressed: () { onOkPressed: () {
if (onOkPressed != null) { if (onOkPressed != null) {
onOkPressed(); onOkPressed();
} else {
context.pop();
} }
context.pop(); context.pop();
}, },

Loading…
Cancel
Save