Merge branch 'dev_aamir' of http://34.17.52.180/Haroon6138/HMG_Patient_App_New into dev_sultan
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 161 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<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>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,197 @@
|
|||||||
|
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: () {});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,116 @@
|
|||||||
|
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),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
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: () {},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,137 +0,0 @@
|
|||||||
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/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/theme/colors.dart';
|
|
||||||
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
|
|
||||||
|
|
||||||
class ProfileSelector extends StatelessWidget {
|
|
||||||
final List<FamilyFileResponseModelLists> profiles;
|
|
||||||
final Function(FamilyFileResponseModelLists) onSelect;
|
|
||||||
|
|
||||||
|
|
||||||
const ProfileSelector({
|
|
||||||
Key? key,
|
|
||||||
required this.profiles,
|
|
||||||
required this.onSelect,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
final double screenHeight = MediaQuery.of(context).size.height;
|
|
||||||
int? activeProfileId = Utils.appState.getAuthenticatedUser()?.patientId;
|
|
||||||
return SizedBox(
|
|
||||||
height: screenHeight * 0.6,
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
// const Text(
|
|
||||||
// "Please select a profile",
|
|
||||||
// style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
|
||||||
// ),
|
|
||||||
// const SizedBox(height: 6),
|
|
||||||
// const Text(
|
|
||||||
// "Switch from the below list of medical file",
|
|
||||||
// style: TextStyle(fontSize: 14, color: Colors.grey),
|
|
||||||
// textAlign: TextAlign.center,
|
|
||||||
// ),
|
|
||||||
const SizedBox(height: 20),
|
|
||||||
|
|
||||||
// ✅ GridView inside scroll
|
|
||||||
GridView.builder(
|
|
||||||
shrinkWrap: true,
|
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
|
||||||
itemCount: profiles.length,
|
|
||||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
|
||||||
crossAxisCount: 2,
|
|
||||||
crossAxisSpacing: 10,
|
|
||||||
mainAxisSpacing: 10,
|
|
||||||
childAspectRatio: 0.75,
|
|
||||||
),
|
|
||||||
itemBuilder: (context, index) {
|
|
||||||
final profile = profiles[index];
|
|
||||||
final isActive =
|
|
||||||
(profile.responseId == activeProfileId);
|
|
||||||
return Container(
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 8),
|
|
||||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
||||||
color: isActive ? Colors.grey.shade100 : AppColors.whiteColor, // Lighter background for active
|
|
||||||
borderRadius: 24,
|
|
||||||
),
|
|
||||||
child: Opacity(
|
|
||||||
opacity: isActive ? 0.5 : 1.0, // Fade all content if active
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
const SizedBox(height: 5),
|
|
||||||
Container(
|
|
||||||
height: 80,
|
|
||||||
width: 78,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
image: DecorationImage(
|
|
||||||
image: AssetImage(
|
|
||||||
profile.gender == 1
|
|
||||||
? AppAssets.male_img
|
|
||||||
: AppAssets.femaleImg,
|
|
||||||
),
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 8),
|
|
||||||
(profile.patientName ?? "Unknown").toText14(
|
|
||||||
isBold: true,
|
|
||||||
maxlines: 1,
|
|
||||||
isCenter: true,
|
|
||||||
),
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
Text(
|
|
||||||
"Relation: ${profile.relationship ?? "N/A"}",
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 12,
|
|
||||||
color: Colors.grey,
|
|
||||||
),
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
),
|
|
||||||
const SizedBox(height: 5),
|
|
||||||
if (isActive)
|
|
||||||
CustomButton(
|
|
||||||
height: 36,
|
|
||||||
onPressed: (){}, // Disabled
|
|
||||||
text: 'Active',
|
|
||||||
backgroundColor: Colors.grey.shade200,
|
|
||||||
borderColor: Colors.grey.shade200,
|
|
||||||
textColor: AppColors.greyTextColor,
|
|
||||||
fontSize: 13,
|
|
||||||
|
|
||||||
).paddingOnly(top: 8, bottom: 4)
|
|
||||||
else
|
|
||||||
CustomButton(
|
|
||||||
height: 36,
|
|
||||||
onPressed: () => onSelect(profile),
|
|
||||||
text: 'Select',
|
|
||||||
backgroundColor: const Color(0xffFEE9EA),
|
|
||||||
borderColor: const Color(0xffFEE9EA),
|
|
||||||
textColor: const Color(0xffED1C2B),
|
|
||||||
fontSize: 13,
|
|
||||||
).paddingOnly(top: 8, bottom: 4),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,26 +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/theme/colors.dart';
|
|
||||||
import '../common_bottom_sheet.dart';
|
|
||||||
import 'my_Family.dart';
|
|
||||||
class MyFamilySheet {
|
|
||||||
static void show(BuildContext context, List<FamilyFileResponseModelLists> familyLists, Function(FamilyFileResponseModelLists) onSelect) {
|
|
||||||
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: ProfileSelector(profiles: familyLists, onSelect: (profile) {
|
|
||||||
|
|
||||||
Navigator.of(context).pop(); // Close the bottom sheet
|
|
||||||
onSelect(profile); // Call the onSelect callback
|
|
||||||
}), callBackFunc: () {},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||