Compare commits
	
		
			No commits in common. 'a79dcad22193c4275f422733b4b2b2eb492a4a5e' and '8240d3e78d85668f2ffa9b7d1cb5bfa36aca00c6' have entirely different histories. 
		
	
	
		
			a79dcad221
			...
			8240d3e78d
		
	
		
	| Before Width: | Height: | Size: 137 KiB | 
| Before Width: | Height: | Size: 127 KiB | 
| Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 10 KiB | 
| Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 19 KiB | 
| @ -1,3 +0,0 @@ | |||||||
| <svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg"> |  | ||||||
| <path fill-rule="evenodd" clip-rule="evenodd" d="M11.5525 2.46209C9.79631 1.38751 8.20843 1.81413 7.24747 2.53374L7.24696 2.53412L6.99967 2.71856L6.75249 2.53412C5.79154 1.81445 4.20322 1.38747 2.44697 2.46209C1.21445 3.21625 0.537796 4.77917 0.775779 6.54921C1.01526 8.33035 2.16771 10.3232 4.57364 12.0996L4.64687 12.1537C5.46216 12.7562 6.04566 13.1875 6.99985 13.1875C7.95405 13.1875 8.53754 12.7562 9.35283 12.1537L9.42606 12.0996C10.3581 11.4114 11.1012 10.6918 11.6765 9.96419C11.6797 9.96013 11.6828 9.95603 11.6859 9.95191C14.0531 6.94717 13.5653 3.69371 11.5525 2.46209ZM7.74698 6.53198L10.4778 9.62245C10.0168 10.1444 9.44544 10.6701 8.74767 11.1853C7.83876 11.8564 7.54669 12.05 6.99985 12.05C6.45302 12.05 6.16095 11.8564 5.25204 11.1853C3.02962 9.54441 2.09491 7.80338 1.90596 6.39801C1.71551 4.98153 2.26916 3.90531 3.0432 3.43169C4.33507 2.64121 5.40954 2.95773 6.05358 3.43314L4.70267 4.46071C3.88293 5.08424 3.8086 6.28812 4.54542 7.00729C4.86355 7.31779 5.27961 7.48142 5.70118 7.48816C5.71901 7.48845 5.73685 7.48845 5.75469 7.48818C6.05478 7.48357 6.3557 7.39938 6.62418 7.232L7.74698 6.53198Z" fill="#2E3039"/> |  | ||||||
| </svg> |  | ||||||
| Before Width: | Height: | Size: 1.2 KiB | 
| @ -1,105 +0,0 @@ | |||||||
| import 'dart:convert'; |  | ||||||
| 
 |  | ||||||
| class FamilyFileResponseModelLists { |  | ||||||
|   int? id; |  | ||||||
|   int? patientId; |  | ||||||
|   int? responseId; |  | ||||||
|   dynamic relationshipId; |  | ||||||
|   dynamic relationship; |  | ||||||
|   dynamic relationshipN; |  | ||||||
|   int? regionId; |  | ||||||
|   int? familyRegionId; |  | ||||||
|   int? status; |  | ||||||
|   dynamic isActive; |  | ||||||
|   String? editedOn; |  | ||||||
|   String? createdOn; |  | ||||||
|   int? age; |  | ||||||
|   String? emaiLAddress; |  | ||||||
|   int? gender; |  | ||||||
|   String? genderDescription; |  | ||||||
|   String? genderImage; |  | ||||||
|   String? mobileNumber; |  | ||||||
|   int? patientDataVerified; |  | ||||||
|   String? patientIdenficationNumber; |  | ||||||
|   String? patientName; |  | ||||||
|   String? statusDescription; |  | ||||||
| 
 |  | ||||||
|   FamilyFileResponseModelLists({ |  | ||||||
|     this.id, |  | ||||||
|     this.patientId, |  | ||||||
|     this.responseId, |  | ||||||
|     this.relationshipId, |  | ||||||
|     this.relationship, |  | ||||||
|     this.relationshipN, |  | ||||||
|     this.regionId, |  | ||||||
|     this.familyRegionId, |  | ||||||
|     this.status, |  | ||||||
|     this.isActive, |  | ||||||
|     this.editedOn, |  | ||||||
|     this.createdOn, |  | ||||||
|     this.age, |  | ||||||
|     this.emaiLAddress, |  | ||||||
|     this.gender, |  | ||||||
|     this.genderDescription, |  | ||||||
|     this.genderImage, |  | ||||||
|     this.mobileNumber, |  | ||||||
|     this.patientDataVerified, |  | ||||||
|     this.patientIdenficationNumber, |  | ||||||
|     this.patientName, |  | ||||||
|     this.statusDescription, |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   factory FamilyFileResponseModelLists.fromRawJson(String str) => FamilyFileResponseModelLists.fromJson(json.decode(str)); |  | ||||||
| 
 |  | ||||||
|   String toRawJson() => json.encode(toJson()); |  | ||||||
| 
 |  | ||||||
|   factory FamilyFileResponseModelLists.fromJson(Map<String, dynamic> json) => FamilyFileResponseModelLists( |  | ||||||
|     id: json["ID"], |  | ||||||
|     patientId: json["PatientID"], |  | ||||||
|     responseId: json["ResponseID"], |  | ||||||
|     relationshipId: json["RelationshipID"], |  | ||||||
|     relationship: json["Relationship"], |  | ||||||
|     relationshipN: json["RelationshipN"], |  | ||||||
|     regionId: json["RegionID"], |  | ||||||
|     familyRegionId: json["FamilyRegionID"], |  | ||||||
|     status: json["Status"], |  | ||||||
|     isActive: json["IsActive"], |  | ||||||
|     editedOn: json["EditedOn"], |  | ||||||
|     createdOn: json["CreatedOn"], |  | ||||||
|     age: json["Age"], |  | ||||||
|     emaiLAddress: json["EmaiLAddress"], |  | ||||||
|     gender: json["Gender"], |  | ||||||
|     genderDescription: json["GenderDescription"], |  | ||||||
|     genderImage: json["GenderImage"], |  | ||||||
|     mobileNumber: json["MobileNumber"], |  | ||||||
|     patientDataVerified: json["PatientDataVerified"], |  | ||||||
|     patientIdenficationNumber: json["PatientIdenficationNumber"], |  | ||||||
|     patientName: json["PatientName"], |  | ||||||
|     statusDescription: json["StatusDescription"], |  | ||||||
|   ); |  | ||||||
| 
 |  | ||||||
|   Map<String, dynamic> toJson() => { |  | ||||||
|     "ID": id, |  | ||||||
|     "PatientID": patientId, |  | ||||||
|     "ResponseID": responseId, |  | ||||||
|     "RelationshipID": relationshipId, |  | ||||||
|     "Relationship": relationship, |  | ||||||
|     "RelationshipN": relationshipN, |  | ||||||
|     "RegionID": regionId, |  | ||||||
|     "FamilyRegionID": familyRegionId, |  | ||||||
|     "Status": status, |  | ||||||
|     "IsActive": isActive, |  | ||||||
|     "EditedOn": editedOn, |  | ||||||
|     "CreatedOn": createdOn, |  | ||||||
|     "Age": age, |  | ||||||
|     "EmaiLAddress": emaiLAddress, |  | ||||||
|     "Gender": gender, |  | ||||||
|     "GenderDescription": genderDescription, |  | ||||||
|     "GenderImage": genderImage, |  | ||||||
|     "MobileNumber": mobileNumber, |  | ||||||
|     "PatientDataVerified": patientDataVerified, |  | ||||||
|     "PatientIdenficationNumber": patientIdenficationNumber, |  | ||||||
|     "PatientName": patientName, |  | ||||||
|     "StatusDescription": statusDescription, |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,197 +0,0 @@ | |||||||
| import 'package:easy_localization/easy_localization.dart'; |  | ||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:flutter_svg/flutter_svg.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/app_assets.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/app_export.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/dependencies.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/enums.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/services/dialog_service.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/theme/colors.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/dropdown/country_dropdown_widget.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/input_widget.dart'; |  | ||||||
| 
 |  | ||||||
| class FamilyMedicalScreen extends StatefulWidget { |  | ||||||
|   final List<FamilyFileResponseModelLists> profiles; |  | ||||||
|   final Function(FamilyFileResponseModelLists) onSelect; |  | ||||||
| 
 |  | ||||||
|   const FamilyMedicalScreen({ |  | ||||||
|     Key? key, |  | ||||||
|     required this.profiles, |  | ||||||
|     required this.onSelect, |  | ||||||
|   }) : super(key: key); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   State<FamilyMedicalScreen> createState() => _FamilyMedicalScreenState(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> { |  | ||||||
|   List<CustomTabBarModel> tabs = [CustomTabBarModel("", LocaleKeys.medicalFile.tr()), CustomTabBarModel("", LocaleKeys.request.tr())]; |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) { |  | ||||||
|     return Scaffold( |  | ||||||
|       backgroundColor: AppColors.scaffoldBgColor, |  | ||||||
|       appBar: CustomAppBar( |  | ||||||
|         onBackPressed: () { |  | ||||||
|           Navigator.of(context).pop(); |  | ||||||
|         }, |  | ||||||
|         onLanguageChanged: (lang) {}, |  | ||||||
|         hideLogoAndLang: true, |  | ||||||
|       ), |  | ||||||
|       body: SingleChildScrollView( |  | ||||||
|         child: Column( |  | ||||||
|           mainAxisSize: MainAxisSize.min, |  | ||||||
|           crossAxisAlignment: CrossAxisAlignment.start, |  | ||||||
|           children: [ |  | ||||||
|             LocaleKeys.myMedicalFile.tr().toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2), |  | ||||||
|             SizedBox(height: 25.h), |  | ||||||
|             CustomTabBar( |  | ||||||
|               tabs: tabs, |  | ||||||
|               onTabChange: (int index) {}, |  | ||||||
|             ), |  | ||||||
|             SizedBox(height: 25.h), |  | ||||||
|             FamilyCards(profiles: widget.profiles, onSelect: widget.onSelect, isShowDetails: true), |  | ||||||
|             SizedBox(height: 20.h), |  | ||||||
|           ], |  | ||||||
|         ), |  | ||||||
|       ).paddingSymmetrical(20, 0), |  | ||||||
|       bottomSheet: Container( |  | ||||||
|           decoration: RoundedRectangleBorder().toSmoothCornerDecoration( |  | ||||||
|             color: AppColors.whiteColor, |  | ||||||
|             customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)), |  | ||||||
|           ), |  | ||||||
|           padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h), |  | ||||||
|           child: CustomButton( |  | ||||||
|             text: "Add a new family member", |  | ||||||
|             onPressed: () { |  | ||||||
|               showModelSheet(); |  | ||||||
|             }, |  | ||||||
|             icon: AppAssets.add_icon, |  | ||||||
|             height: 56.h, |  | ||||||
|             fontWeight: FontWeight.w600, |  | ||||||
|           )), |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void showModelSheet() { |  | ||||||
|     AuthenticationViewModel authVm = getIt.get<AuthenticationViewModel>(); |  | ||||||
|     return showCommonBottomSheetWithoutHeight(context, |  | ||||||
|         title: "Add Family Member", |  | ||||||
|         child: Column( |  | ||||||
|           crossAxisAlignment: CrossAxisAlignment.start, |  | ||||||
|           mainAxisAlignment: MainAxisAlignment.start, |  | ||||||
|           children: [ |  | ||||||
|             "Please fill the below field to add a new family member to your profile".toText16(color: AppColors.textColor, weight: FontWeight.w500), |  | ||||||
|             SizedBox(height: 20.h), |  | ||||||
|             Container( |  | ||||||
|               decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)), |  | ||||||
|               padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 8.h), |  | ||||||
|               child: Column( |  | ||||||
|                 children: [ |  | ||||||
|                   CustomCountryDropdown( |  | ||||||
|                     countryList: CountryEnum.values, |  | ||||||
|                     onCountryChange: authVm.onCountryChange, |  | ||||||
|                   ).paddingOnly(top: 8.h, bottom: 16.h), |  | ||||||
|                   Divider( |  | ||||||
|                     height: 1.h, |  | ||||||
|                     color: AppColors.spacerLineColor, |  | ||||||
|                   ), |  | ||||||
|                   TextInputWidget( |  | ||||||
|                     labelText: LocaleKeys.nationalIdNumber.tr(), |  | ||||||
|                     hintText: "xxxxxxxxx", |  | ||||||
|                     controller: authVm.nationalIdController, |  | ||||||
|                     // focusNode: _nationalIdFocusNode, |  | ||||||
|                     isEnable: true, |  | ||||||
|                     prefix: null, |  | ||||||
|                     isAllowRadius: true, |  | ||||||
|                     isBorderAllowed: false, |  | ||||||
|                     isAllowLeadingIcon: true, |  | ||||||
|                     autoFocus: true, |  | ||||||
|                     keyboardType: TextInputType.number, |  | ||||||
|                     padding: EdgeInsets.symmetric(vertical: 8.h), |  | ||||||
|                     leadingIcon: AppAssets.student_card, |  | ||||||
|                   ).paddingOnly(top: 8.h, bottom: 8.h), |  | ||||||
|                   Divider( |  | ||||||
|                     height: 1.h, |  | ||||||
|                     color: AppColors.spacerLineColor, |  | ||||||
|                   ), |  | ||||||
|                   TextInputWidget( |  | ||||||
|                     labelText: LocaleKeys.phoneNumber.tr(), |  | ||||||
|                     hintText: "574345434", |  | ||||||
|                     controller: authVm.phoneNumberController, |  | ||||||
|                     isEnable: true, |  | ||||||
|                     prefix: authVm.selectedCountrySignup.countryCode, |  | ||||||
|                     isAllowRadius: true, |  | ||||||
|                     isBorderAllowed: false, |  | ||||||
|                     isAllowLeadingIcon: true, |  | ||||||
|                     autoFocus: true, |  | ||||||
|                     keyboardType: TextInputType.number, |  | ||||||
|                     padding: EdgeInsets.symmetric(vertical: 8.h), |  | ||||||
|                     leadingIcon: AppAssets.smart_phone, |  | ||||||
|                   ).paddingOnly(top: 8.h, bottom: 4), |  | ||||||
| 
 |  | ||||||
|                   //TextInputWidget( |  | ||||||
|                   //                           labelText: widget.isForEmail ? LocaleKeys.email.tr() : LocaleKeys.phoneNumber.tr(), |  | ||||||
|                   //                           hintText: widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx", |  | ||||||
|                   //                           controller: widget.textController!, |  | ||||||
|                   //                           focusNode: _textFieldFocusNode, |  | ||||||
|                   //                           autoFocus: widget.autoFocus, |  | ||||||
|                   //                           padding: EdgeInsets.all(8.h), |  | ||||||
|                   //                           keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number, |  | ||||||
|                   //                           onChange: (value) { |  | ||||||
|                   //                             if (widget.onChange != null) { |  | ||||||
|                   //                               widget.onChange!(value); |  | ||||||
|                   //                             } |  | ||||||
|                   //                           }, |  | ||||||
|                   //                           onCountryChange: (value) { |  | ||||||
|                   //                             if (widget.onCountryChange != null) { |  | ||||||
|                   //                               widget.onCountryChange!(value); |  | ||||||
|                   //                             } |  | ||||||
|                   //                           }, |  | ||||||
|                   //                           isEnable: true, |  | ||||||
|                   //                           isReadOnly: widget.isFromSavedLogin, |  | ||||||
|                   //                           prefix: widget.isForEmail ? null : widget.countryCode, |  | ||||||
|                   //                           isBorderAllowed: false, |  | ||||||
|                   //                           isAllowLeadingIcon: true, |  | ||||||
|                   //                           fontSize: 13.h, |  | ||||||
|                   //                           isCountryDropDown: widget.isEnableCountryDropdown, |  | ||||||
|                   //                           leadingIcon: widget.isForEmail ? AppAssets.email : AppAssets.smart_phone, |  | ||||||
|                   //                         ) |  | ||||||
|                 ], |  | ||||||
|               ), |  | ||||||
|             ), |  | ||||||
|             SizedBox(height: 20.h), |  | ||||||
|             CustomButton( |  | ||||||
|                 text: "Verify the member", |  | ||||||
|                 onPressed: () { |  | ||||||
|                   FocusScope.of(context).unfocus(); |  | ||||||
|                   if (ValidationUtils.isValidatedIdAndPhoneWithCountryValidation( |  | ||||||
|                     nationalId: authVm.nationalIdController.text, |  | ||||||
|                     selectedCountry: authVm.selectedCountrySignup, |  | ||||||
|                     phoneNumber: authVm.phoneNumberController.text, |  | ||||||
|                     onOkPress: () { |  | ||||||
|                       Navigator.of(context).pop(); |  | ||||||
|                     }, |  | ||||||
|                   )) {} |  | ||||||
|                 }, |  | ||||||
|                 icon: AppAssets.add_icon, |  | ||||||
|                 height: 56.h, |  | ||||||
|                 fontWeight: FontWeight.w600), |  | ||||||
|             SizedBox(height: 20.h), |  | ||||||
|           ], |  | ||||||
|         ), |  | ||||||
|         callBackFunc: () {}); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,116 +0,0 @@ | |||||||
| import 'package:easy_localization/easy_localization.dart'; |  | ||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/app_assets.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/app_export.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/app_state.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/dependencies.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/enums.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/theme/colors.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; |  | ||||||
| 
 |  | ||||||
| class FamilyCards extends StatefulWidget { |  | ||||||
|   final List<FamilyFileResponseModelLists> profiles; |  | ||||||
|   final Function(FamilyFileResponseModelLists) onSelect; |  | ||||||
|   final bool isShowDetails; |  | ||||||
|   final bool isBottomSheet; |  | ||||||
| 
 |  | ||||||
|   const FamilyCards({super.key, required this.profiles, required this.onSelect, this.isShowDetails = false, this.isBottomSheet = false}); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   State<FamilyCards> createState() => _FamilyCardsState(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class _FamilyCardsState extends State<FamilyCards> { |  | ||||||
|   AppState appState = getIt<AppState>(); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) { |  | ||||||
|     return GridView.builder( |  | ||||||
|       shrinkWrap: true, |  | ||||||
|       physics: const NeverScrollableScrollPhysics(), |  | ||||||
|       itemCount: widget.profiles.length, |  | ||||||
|       gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( |  | ||||||
|         crossAxisCount: 2, |  | ||||||
|         crossAxisSpacing: 10.h, |  | ||||||
|         mainAxisSpacing: 10.h, |  | ||||||
|         childAspectRatio: widget.isShowDetails ? 0.56.h : 0.74.h, |  | ||||||
|       ), |  | ||||||
|       itemBuilder: (context, index) { |  | ||||||
|         final profile = widget.profiles[index]; |  | ||||||
|         final isActive = (profile.responseId == appState |  | ||||||
|             .getAuthenticatedUser() |  | ||||||
|             ?.patientId); |  | ||||||
|         return Container( |  | ||||||
|           padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), |  | ||||||
|           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), |  | ||||||
|           child: Opacity( |  | ||||||
|             opacity: isActive ? 0.4 : 1.0, // Fade all content if active |  | ||||||
|             child: Column( |  | ||||||
|               mainAxisSize: MainAxisSize.min, |  | ||||||
|               children: [ |  | ||||||
|                 SizedBox(height: 5.h), |  | ||||||
|                 Utils.buildImgWithAssets( |  | ||||||
|                     icon: profile.gender == 1 ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.male_img) : (profile.age! < 7 ? AppAssets.babyGirlImg : AppAssets.femaleImg), |  | ||||||
|                     width: 80.h, |  | ||||||
|                     height: 78.h), |  | ||||||
|                 SizedBox(height: 8.h), |  | ||||||
|                 (profile.patientName ?? "Unknown").toText16(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), |  | ||||||
|                 SizedBox(height: 4.h), |  | ||||||
|                 CustomChipWidget( |  | ||||||
|                     chipType: ChipTypeEnum.alert, |  | ||||||
|                     backgroundColor: AppColors.lightGrayBGColor, |  | ||||||
|                     chipText: "Relation: ${profile.relationship ?? "N/A"}", |  | ||||||
|                     iconAsset: AppAssets.heart, |  | ||||||
|                     isShowBorder: false, |  | ||||||
|                     borderRadius: 8.h, |  | ||||||
|                     textColor: AppColors.textColor), |  | ||||||
|                 widget.isShowDetails ? SizedBox(height: 4.h) : SizedBox(), |  | ||||||
|                 widget.isShowDetails |  | ||||||
|                     ? CustomChipWidget( |  | ||||||
|                   chipType: ChipTypeEnum.alert, |  | ||||||
|                   backgroundColor: AppColors.lightGrayBGColor, |  | ||||||
|                   chipText: "Age: ${profile.age ?? "N/A"} Years", |  | ||||||
|                   isShowBorder: false, |  | ||||||
|                   borderRadius: 8.h, |  | ||||||
|                   textColor: AppColors.textColor, |  | ||||||
|                 ) |  | ||||||
|                     : SizedBox(), |  | ||||||
|                 widget.isShowDetails ? SizedBox(height: 8.h) : SizedBox(), |  | ||||||
|                 Spacer(), |  | ||||||
|                 if (isActive) |  | ||||||
|                   CustomButton( |  | ||||||
|                     height: 40.h, |  | ||||||
|                     onPressed: () {}, |  | ||||||
|                     text: LocaleKeys.active.tr(), |  | ||||||
|                     backgroundColor: Colors.grey.shade200, |  | ||||||
|                     borderColor: Colors.grey.shade200, |  | ||||||
|                     textColor: AppColors.greyTextColor, |  | ||||||
|                     fontSize: 13.h, |  | ||||||
|                   ).paddingOnly(top: 0, bottom: 0) |  | ||||||
|                 else |  | ||||||
|                   CustomButton( |  | ||||||
|                     height: 40.h, |  | ||||||
|                     onPressed: () => widget.onSelect(profile), |  | ||||||
|                     text: LocaleKeys.select.tr(), |  | ||||||
|                     backgroundColor: AppColors.secondaryLightRedColor, |  | ||||||
|                     borderColor: AppColors.secondaryLightRedColor, |  | ||||||
|                     textColor: AppColors.primaryRedColor, |  | ||||||
|                     fontSize: 13.h, |  | ||||||
|                     icon: widget.isBottomSheet ? null :  AppAssets.heart, |  | ||||||
|                     iconColor: AppColors.primaryRedColor, |  | ||||||
|                     padding: EdgeInsets.symmetric(vertical: 0, horizontal: 0), |  | ||||||
|                   ).paddingOnly(top: 0, bottom: 0), |  | ||||||
|               ], |  | ||||||
|             ), |  | ||||||
|           ), |  | ||||||
|         ); |  | ||||||
|       }, |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/core/utils/utils.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/presentation/my_family/my_Family.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/theme/colors.dart'; |  | ||||||
| import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; |  | ||||||
| 
 |  | ||||||
| class MyFamilySheet { |  | ||||||
|   static void show(BuildContext context, List<FamilyFileResponseModelLists> familyLists, Function(FamilyFileResponseModelLists) onSelect) { |  | ||||||
|     return showCommonBottomSheetWithoutHeight( |  | ||||||
|       context, |  | ||||||
|       titleWidget: Column( |  | ||||||
|         crossAxisAlignment: CrossAxisAlignment.start, |  | ||||||
|         children: [ |  | ||||||
|           'Please select a profile'.toText21(isBold: true), |  | ||||||
|           'switch from the below list of medical file'.toText16(weight: FontWeight.w100, color: AppColors.greyTextColor), |  | ||||||
|         ], |  | ||||||
|       ), |  | ||||||
|       child: FamilyCards( |  | ||||||
|           profiles: familyLists, |  | ||||||
|           onSelect: (profile) { |  | ||||||
|             Navigator.of(context).pop(); // Close the bottom sheet |  | ||||||
|             onSelect(profile); // Call the onSelect callback |  | ||||||
|           }, |  | ||||||
|           isBottomSheet: true), |  | ||||||
|       callBackFunc: () {}, |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -0,0 +1,44 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | 
 | ||||||
|  | class ProfileSelector extends StatelessWidget { | ||||||
|  |   final List<Map<String, dynamic>> profiles; | ||||||
|  |   final Function(Map<String, dynamic>) onSelect; | ||||||
|  | 
 | ||||||
|  |   const ProfileSelector({ | ||||||
|  |     Key? key, | ||||||
|  |     required this.profiles, | ||||||
|  |     required this.onSelect, | ||||||
|  |   }) : super(key: key); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Column( | ||||||
|  |       mainAxisSize: MainAxisSize.min, | ||||||
|  |       children: profiles.map((profile) { | ||||||
|  |         return ListTile( | ||||||
|  |           leading: CircleAvatar( | ||||||
|  |             radius: 22, | ||||||
|  |             backgroundImage: profile["GenderImage"] != null && | ||||||
|  |                 profile["GenderImage"].toString().isNotEmpty | ||||||
|  |                 ? NetworkImage(profile["GenderImage"]) | ||||||
|  |                 : AssetImage( | ||||||
|  |                 profile["Gender"] == 1 | ||||||
|  |                     ? "assets/images/male.png" | ||||||
|  |                     : "assets/images/female.png") | ||||||
|  |             as ImageProvider, | ||||||
|  |           ), | ||||||
|  |           title: Text( | ||||||
|  |             profile["PatientName"] ?? "Unknown", | ||||||
|  |             style: const TextStyle(fontWeight: FontWeight.w600), | ||||||
|  |           ), | ||||||
|  |           subtitle: Text( | ||||||
|  |             profile["Relationship"] ?? "Self", | ||||||
|  |             style: const TextStyle(color: Colors.grey), | ||||||
|  |           ), | ||||||
|  |           trailing: const Icon(Icons.arrow_forward_ios, size: 16), | ||||||
|  |           onTap: () => onSelect(profile), | ||||||
|  |         ); | ||||||
|  |       }).toList(), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import '../common_bottom_sheet.dart'; | ||||||
|  | import 'my_Family.dart'; | ||||||
|  |  class MyFamilySheet { | ||||||
|  |    static void show(BuildContext context, List<Map<String, dynamic>> profiles, Function(Map<String, dynamic>) onSelect) { | ||||||
|  |      showCommonBottomSheetWithoutHeight( | ||||||
|  |        context, | ||||||
|  |        title: 'Select Profile', | ||||||
|  |        child: ProfileSelector(profiles: profiles, onSelect: (profile) { | ||||||
|  |          Navigator.of(context).pop(); // Close the bottom sheet | ||||||
|  |          onSelect(profile); // Call the onSelect callback | ||||||
|  |        }), callBackFunc: () {}, | ||||||
|  |      ); | ||||||
|  |    } | ||||||
|  |  } | ||||||