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: "My Medical File".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: [
 | 
						|
          CustomTabBar(
 | 
						|
            activeBackgroundColor: AppColors.secondaryLightRedColor,
 | 
						|
            activeTextColor: AppColors.primaryRedColor,
 | 
						|
            tabs: appState.isChildLoggedIn
 | 
						|
                ? [CustomTabBarModel(null, LocaleKeys.medicalFile.tr())]
 | 
						|
                : [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())],
 | 
						|
            onTabChange: (index) {
 | 
						|
              medicalVM!.onFamilyFileTabChange(index);
 | 
						|
            },
 | 
						|
          ),
 | 
						|
          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();
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |