You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			198 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			198 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Dart
		
	
| 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: () {});
 | |
|   }
 | |
| }
 |