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.
		
		
		
		
		
			
		
			
				
	
	
		
			135 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			135 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Dart
		
	
| import 'dart:convert';
 | |
| 
 | |
| 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/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/medical_file_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/collapsing_list_view.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';
 | |
| import 'package:provider/provider.dart';
 | |
| 
 | |
| class FamilyMedicalScreen extends StatefulWidget {
 | |
|   final List<FamilyFileResponseModelLists> profiles;
 | |
|   final Function(FamilyFileResponseModelLists) onSelect;
 | |
| 
 | |
|   const FamilyMedicalScreen({
 | |
|     super.key,
 | |
|     required this.profiles,
 | |
|     required this.onSelect,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   State<FamilyMedicalScreen> createState() => _FamilyMedicalScreenState();
 | |
| }
 | |
| 
 | |
| class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
 | |
|   MedicalFileViewModel? medicalVM;
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
|     medicalVM = context.read<MedicalFileViewModel>();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     AppState appState = getIt.get<AppState>();
 | |
| 
 | |
|     return CollapsingListView(
 | |
|       title: "Medical Files".needTranslation,
 | |
|       bottomChild: appState.getAuthenticatedUser()!.isParentUser!
 | |
|           ? 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".needTranslation,
 | |
|                   onPressed: () {
 | |
|                     DialogService dialogService = getIt.get<DialogService>();
 | |
|                     dialogService.showAddFamilyFileSheet(
 | |
|                         label: "Add Family Member".needTranslation,
 | |
|                         message: "Please fill the below field to add a new family member to your profile".needTranslation,
 | |
|                         onVerificationPress: () {
 | |
|                           medicalVM!.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms);
 | |
|                         });
 | |
|                   },
 | |
|                   icon: AppAssets.add_icon,
 | |
|                   height: 56.h,
 | |
|                   fontSize: 16,
 | |
|                   borderRadius: 12.h,
 | |
|                   fontWeight: FontWeight.w500))
 | |
|           : SizedBox(),
 | |
|       child: Column(
 | |
|         mainAxisSize: MainAxisSize.min,
 | |
|         crossAxisAlignment: CrossAxisAlignment.start,
 | |
|         children: [
 | |
|           appState.isChildLoggedIn
 | |
|               ? SizedBox()
 | |
|               : CustomTabBar(
 | |
|                   activeBackgroundColor: AppColors.secondaryLightRedColor,
 | |
|                   activeTextColor: AppColors.primaryRedColor,
 | |
|                   tabs: [CustomTabBarModel(null, LocaleKeys.family.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())],
 | |
|                   onTabChange: (index) {
 | |
|                     medicalVM!.onFamilyFileTabChange(index);
 | |
|                   },
 | |
|                 ),
 | |
|           appState.isChildLoggedIn ? SizedBox() : SizedBox(height: 25.h),
 | |
|           Selector<MedicalFileViewModel, int>(selector: (_, model) => model.getSelectedFamilyFileTabIndex, builder: (context, selectedIndex, child) => getFamilyTabs(index: selectedIndex)),
 | |
|           SizedBox(height: 20.h),
 | |
|         ],
 | |
|       ).paddingSymmetrical(20, 0),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget getFamilyTabs({required int index}) {
 | |
|     switch (index) {
 | |
|       case 0:
 | |
|         return FamilyCards(
 | |
|           profiles: medicalVM!.patientFamilyFiles,
 | |
|           onSelect: (FamilyFileResponseModelLists profile) {
 | |
|             medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber);
 | |
|           },
 | |
|           onRemove: (FamilyFileResponseModelLists profile) {
 | |
|             medicalVM!.removeFileFromFamilyMembers(id: profile.id);
 | |
|           },
 | |
|           isLeftAligned: true,
 | |
|           isShowDetails: true,
 | |
|           isShowRemoveButton: true,
 | |
|         );
 | |
|       case 1:
 | |
|         return FamilyCards(
 | |
|           profiles: medicalVM!.pendingFamilyFiles,
 | |
|           isRequestDesign: true,
 | |
|           onSelect: (FamilyFileResponseModelLists profile) {
 | |
|             medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 3);
 | |
|           },
 | |
|           onRemove: (FamilyFileResponseModelLists profile) {
 | |
|             medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 4);
 | |
|           },
 | |
|           isShowDetails: true,
 | |
|         );
 | |
|       default:
 | |
|         return SizedBox.shrink();
 | |
|     }
 | |
|   }
 | |
| }
 |