Compare commits

..

No commits in common. 'a7bd5f61cb430ffc561bce3d7b8bb4442332b61a' and '9e3035f02bbc4b41a117f4a0eb62f6f8c658c69d' have entirely different histories.

@ -276,7 +276,6 @@ 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,6 +1,2 @@
export '../routes/app_routes.dart'; export '../routes/app_routes.dart';
export 'utils/size_utils.dart'; export 'utils/size_utils.dart';

@ -149,11 +149,13 @@ 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,7 +86,6 @@ 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;
//================== //==================
@ -347,17 +346,15 @@ class AuthenticationViewModel extends ChangeNotifier {
); );
} }
Future<void> sendActivationCode( Future<void> sendActivationCode({required OTPTypeEnum otpTypeEnum,
{required OTPTypeEnum otpTypeEnum, required String nationalIdOrFileNumber,
required String nationalIdOrFileNumber, required String phoneNumber,
required String phoneNumber, required bool isForRegister,
required bool isForRegister, dynamic payload,
dynamic payload, bool isComingFromResendOTP = false,
bool isComingFromResendOTP = false, bool isExcludedUser = false,
bool isExcludedUser = false, bool isFormFamilyFile = false,
bool isFormFamilyFile = false, int? responseID}) async {
bool isNeedLoading = false,
int? responseID}) async {
var request = RequestUtils.getCommonRequestSendActivationCode( var request = RequestUtils.getCommonRequestSendActivationCode(
otpTypeEnum: otpTypeEnum, otpTypeEnum: otpTypeEnum,
mobileNumber: phoneNumber, mobileNumber: phoneNumber,
@ -365,7 +362,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: isFormFamilyFile ? _appState.getAuthenticatedUser()!.patientId : 0, patientId: 0,
isForRegister: isForRegister, isForRegister: isForRegister,
patientOutSA: isForRegister patientOutSA: isForRegister
? isPatientOutsideSA(request: payload) ? isPatientOutsideSA(request: payload)
@ -379,9 +376,7 @@ 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);
} }
@ -392,18 +387,9 @@ 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) {
@ -587,29 +573,28 @@ class AuthenticationViewModel extends ChangeNotifier {
} }
// _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); // _appState.setUserBloodGroup = (activation.patientBlodType ?? "");
_appState.setAppAuthToken = activation.authenticationTokenId; _appState.setAppAuthToken = activation.authenticationTokenId;
final request = RequestUtils.getAuthanticatedCommonRequest().toJson(); final request = await 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>();
insertPatientIMEIData(loginTypeEnum.toInt); await insertPatientIMEIData(loginTypeEnum.toInt);
medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan await medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan
medicalVm.getAllPendingRecordsByResponseId(); await 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);
@ -959,7 +944,6 @@ 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,7 +298,9 @@ 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,9 +439,6 @@ 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>();
@ -452,7 +449,6 @@ 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!,
@ -467,7 +463,7 @@ class MedicalFileViewModel extends ChangeNotifier {
_dialogService.showExceptionBottomSheet( _dialogService.showExceptionBottomSheet(
message: apiResponse.data["Message"], message: apiResponse.data["Message"],
onOkPressed: () { onOkPressed: () {
navigationService.pop(); LoaderBottomSheet.showLoader();
authVM.sendActivationCode( authVM.sendActivationCode(
otpTypeEnum: otpTypeEnum, otpTypeEnum: otpTypeEnum,
nationalIdOrFileNumber: request.sharedPatientIdentificationId!, nationalIdOrFileNumber: request.sharedPatientIdentificationId!,
@ -475,7 +471,6 @@ 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: () {
@ -515,8 +510,6 @@ 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();
@ -582,11 +575,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: "Medical Files".needTranslation, title: "My Medical File".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: [
appState.isChildLoggedIn CustomTabBar(
? SizedBox() activeBackgroundColor: AppColors.secondaryLightRedColor,
: CustomTabBar( activeTextColor: AppColors.primaryRedColor,
activeBackgroundColor: AppColors.secondaryLightRedColor, tabs: appState.isChildLoggedIn
activeTextColor: AppColors.primaryRedColor, ? [CustomTabBarModel(null, LocaleKeys.medicalFile.tr())]
tabs: [CustomTabBarModel(null, LocaleKeys.family.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())], : [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())],
onTabChange: (index) { onTabChange: (index) {
medicalVM!.onFamilyFileTabChange(index); medicalVM!.onFamilyFileTabChange(index);
}, },
), ),
appState.isChildLoggedIn ? SizedBox() : SizedBox(height: 25.h), 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,70 +67,68 @@ class _FamilyCardsState extends State<FamilyCards> {
], ],
), ),
SizedBox(height: 24.h), SizedBox(height: 24.h),
widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).isEmpty ListView.builder(
? Utils.getNoDataWidget(context) shrinkWrap: true,
: ListView.builder( physics: NeverScrollableScrollPhysics(),
shrinkWrap: true, padding: EdgeInsets.zero,
physics: NeverScrollableScrollPhysics(), itemCount: widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).length,
padding: EdgeInsets.zero, itemBuilder: (context, index) {
itemCount: widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).length, final mySideProfiles = widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).toList();
itemBuilder: (context, index) { FamilyFileResponseModelLists profile = mySideProfiles[index];
final mySideProfiles = widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).toList(); return Container(
FamilyFileResponseModelLists profile = mySideProfiles[index]; margin: EdgeInsets.only(bottom: 12.h),
return Container( padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h),
margin: EdgeInsets.only(bottom: 12.h), decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24),
padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), child: Opacity(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), opacity: 1.0,
child: Opacity( child: Column(
opacity: 1.0, mainAxisSize: MainAxisSize.min,
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
mainAxisAlignment: MainAxisAlignment.start, CustomChipWidget(
children: [ height: 30.h,
CustomChipWidget( chipType: ChipTypeEnum.alert,
height: 30.h, backgroundColor: profile.status == FamilyFileEnum.pending.toInt
chipType: ChipTypeEnum.alert, ? AppColors.alertLightColor.withValues(alpha: 0.20)
backgroundColor: profile.status == FamilyFileEnum.pending.toInt : profile.status == FamilyFileEnum.rejected.toInt
? AppColors.alertLightColor.withValues(alpha: 0.20) ? AppColors.primaryRedColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.rejected.toInt : profile.status == FamilyFileEnum.active.toInt
? AppColors.primaryRedColor.withValues(alpha: 0.20) ? AppColors.lightGreenColor
: profile.status == FamilyFileEnum.active.toInt : AppColors.lightGrayBGColor,
? AppColors.lightGreenColor chipText: profile.statusDescription ?? "N/A",
: AppColors.lightGrayBGColor, iconAsset: null,
chipText: profile.statusDescription ?? "N/A", isShowBorder: false,
iconAsset: null, borderRadius: 8.h,
isShowBorder: false, textColor: profile.status == FamilyFileEnum.pending.toInt
borderRadius: 8.h, ? AppColors.alertLightColor
textColor: profile.status == FamilyFileEnum.pending.toInt : profile.status == FamilyFileEnum.rejected.toInt
? AppColors.alertLightColor ? AppColors.primaryRedColor
: profile.status == FamilyFileEnum.rejected.toInt : profile.status == FamilyFileEnum.active.toInt
? AppColors.primaryRedColor ? AppColors.textGreenColor
: profile.status == FamilyFileEnum.active.toInt : AppColors.alertColor),
? AppColors.textGreenColor SizedBox(height: 8.h),
: AppColors.alertColor), Wrap(alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, runAlignment: WrapAlignment.start, spacing: 0.h, children: [
SizedBox(height: 8.h), (profile.patientName ?? "").toText14(isBold: false, isCenter: false, maxlines: 1, weight: FontWeight.w600),
Wrap(alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, runAlignment: WrapAlignment.start, spacing: 0.h, children: [ (getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false))
(profile.patientName ?? "").toText14(isBold: false, isCenter: false, maxlines: 1, weight: FontWeight.w600), .toText12(isBold: false, isCenter: false, maxLine: 1, fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
(getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)) ]),
.toText12(isBold: false, isCenter: false, maxLine: 1, fontWeight: FontWeight.w500, color: AppColors.greyTextColor), SizedBox(height: 8.h),
]), CustomChipWidget(
SizedBox(height: 8.h), height: 30.h,
CustomChipWidget( chipType: ChipTypeEnum.alert,
height: 30.h, backgroundColor: AppColors.lightGrayBGColor,
chipType: ChipTypeEnum.alert, chipText: "Medical File: ${profile.responseId ?? "N/A"}",
backgroundColor: AppColors.lightGrayBGColor, iconAsset: null,
chipText: "Medical File: ${profile.responseId ?? "N/A"}", isShowBorder: false,
iconAsset: null, borderRadius: 8.h,
isShowBorder: false, textColor: AppColors.textColor),
borderRadius: 8.h, ],
textColor: AppColors.textColor), ),
],
),
),
);
},
), ),
);
},
),
SizedBox(height: 20.h), SizedBox(height: 20.h),
], ],
); );
@ -233,118 +231,115 @@ class _FamilyCardsState extends State<FamilyCards> {
Widget manageFamily() { Widget manageFamily() {
NavigationService navigationService = getIt<NavigationService>(); NavigationService navigationService = getIt<NavigationService>();
return ListView.builder(
return widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).isEmpty shrinkWrap: true,
? Utils.getNoDataWidget(context) physics: NeverScrollableScrollPhysics(),
: ListView.builder( padding: EdgeInsetsGeometry.zero,
shrinkWrap: true, itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length,
physics: NeverScrollableScrollPhysics(), itemBuilder: (context, index) {
padding: EdgeInsetsGeometry.zero, final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList();
itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length, FamilyFileResponseModelLists profile = otherProfiles[index];
itemBuilder: (context, index) { return Container(
final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList(); margin: EdgeInsets.only(bottom: 12.h),
FamilyFileResponseModelLists profile = otherProfiles[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 ),
? AppColors.textGreenColor SizedBox(height: 8.h),
: AppColors.alertColor, Wrap(
), alignment: WrapAlignment.start,
SizedBox(height: 8.h), children: [
Wrap( (profile.patientName ?? "").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600),
alignment: WrapAlignment.start, (getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)).toText14(
children: [ isBold: false,
(profile.patientName ?? "").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), isCenter: true,
(getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)).toText14( maxlines: 1,
isBold: false, weight: FontWeight.w500,
isCenter: true, color: AppColors.greyTextColor,
maxlines: 1, ),
weight: FontWeight.w500, ],
color: AppColors.greyTextColor, ),
), SizedBox(height: 8.h),
], CustomChipWidget(
), height: 30.h,
SizedBox(height: 8.h), chipType: ChipTypeEnum.alert,
CustomChipWidget( backgroundColor: AppColors.lightGrayBGColor,
height: 30.h, chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}",
chipType: ChipTypeEnum.alert, iconAsset: null,
backgroundColor: AppColors.lightGrayBGColor, isShowBorder: false,
chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}", borderRadius: 8.h,
iconAsset: null, textColor: AppColors.textColor,
isShowBorder: false, ),
borderRadius: 8.h, SizedBox(height: 16.h),
textColor: AppColors.textColor, Row(
), children: [
SizedBox(height: 16.h), profile.status == FamilyFileEnum.active.toInt
Row( ? SizedBox()
children: [ : Expanded(
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: profile.status == FamilyFileEnum.active.toInt ? LocaleKeys.removeMember.tr() : LocaleKeys.cancel.tr(), text: LocaleKeys.confirm.tr(),
onPressed: () { onPressed: () {
navigationService.pop(); navigationService.pop();
widget.onRemove(profile); widget.onSelect(profile);
}, },
backgroundColor: AppColors.secondaryLightRedColor, backgroundColor: AppColors.lightGreenButtonColor,
borderColor: AppColors.secondaryLightRedColor, borderColor: AppColors.lightGreenButtonColor,
textColor: AppColors.primaryRedColor, textColor: AppColors.textGreenColor,
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,13 +301,11 @@ 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),
isActive && appState.getAuthenticatedUser()!.bloodGroup != null AppCustomChipWidget(
? AppCustomChipWidget( icon: AppAssets.blood_icon,
icon: AppAssets.blood_icon, labelPadding: EdgeInsetsDirectional.only(start: -6.h, end: 8.h),
labelPadding: EdgeInsetsDirectional.only(start: -6.h, end: 8.h), labelText: "Blood: ${appState.getAuthenticatedUser()!.bloodGroup ?? "."}",
labelText: "Blood: ${appState.getAuthenticatedUser()!.bloodGroup ?? ""}", iconColor: AppColors.primaryRedColor),
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,
@ -332,7 +330,7 @@ class FamilyCardWidget extends StatelessWidget {
if (isLoading) { if (isLoading) {
icon = AppAssets.cancel_circle_icon; icon = AppAssets.cancel_circle_icon;
labelText = "Insurance".needTranslation; labelText = "Insurance";
iconColor = AppColors.primaryRedColor; iconColor = AppColors.primaryRedColor;
backgroundColor = AppColors.primaryRedColor; backgroundColor = AppColors.primaryRedColor;
} else if (isExpired) { } else if (isExpired) {
@ -358,6 +356,82 @@ 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();
// }),
], ],
), ),
), ),
@ -365,6 +439,49 @@ 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,8 +59,6 @@ class DialogServiceImp implements DialogService {
onOkPressed: () { onOkPressed: () {
if (onOkPressed != null) { if (onOkPressed != null) {
onOkPressed(); onOkPressed();
} else {
context.pop();
} }
context.pop(); context.pop();
}, },

Loading…
Cancel
Save