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: () {},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||