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.
		
		
		
		
		
			
		
			
				
	
	
		
			116 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			116 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Dart
		
	
| import 'dart:async';
 | |
| 
 | |
| 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_state.dart';
 | |
| import 'package:hmg_patient_app_new/core/dependencies.dart';
 | |
| import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 | |
| import 'package:hmg_patient_app_new/core/utils/size_utils.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/insurance/insurance_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 | |
| import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_update_details_card.dart';
 | |
| import 'package:hmg_patient_app_new/presentation/insurance/widgets/patient_insurance_card.dart';
 | |
| import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
 | |
| import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 | |
| import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
 | |
| import 'package:hmg_patient_app_new/theme/colors.dart';
 | |
| import 'package:hmg_patient_app_new/extensions/widget_extensions.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/shimmer/movies_shimmer_widget.dart';
 | |
| import 'package:provider/provider.dart';
 | |
| 
 | |
| import 'widgets/insurance_history.dart';
 | |
| 
 | |
| class InsuranceHomePage extends StatefulWidget {
 | |
|   const InsuranceHomePage({super.key});
 | |
| 
 | |
|   @override
 | |
|   State<InsuranceHomePage> createState() => _InsuranceHomePageState();
 | |
| }
 | |
| 
 | |
| class _InsuranceHomePageState extends State<InsuranceHomePage> {
 | |
|   late InsuranceViewModel insuranceViewModel;
 | |
| 
 | |
|   late AppState appState;
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     scheduleMicrotask(() {
 | |
|       insuranceViewModel.initInsuranceProvider();
 | |
|     });
 | |
|     super.initState();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     appState = getIt.get<AppState>();
 | |
|     insuranceViewModel = Provider.of<InsuranceViewModel>(context, listen: false);
 | |
|     return Scaffold(
 | |
|       backgroundColor: AppColors.bgScaffoldColor,
 | |
|       body: CollapsingListView(
 | |
|         title: "${LocaleKeys.insurance.tr(context: context)} ${LocaleKeys.updateInsurance.tr(context: context)}",
 | |
|         history: () {
 | |
|           insuranceViewModel.setIsInsuranceHistoryLoading(true);
 | |
|           insuranceViewModel.getPatientInsuranceCardHistory();
 | |
|           showCommonBottomSheetWithoutHeight(context, child: InsuranceHistory(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false);
 | |
|         },
 | |
|         child: SingleChildScrollView(
 | |
|           child: Consumer<InsuranceViewModel>(builder: (context, insuranceVM, child) {
 | |
|             return Column(
 | |
|               crossAxisAlignment: CrossAxisAlignment.start,
 | |
|               children: [
 | |
|                 insuranceVM.isInsuranceLoading
 | |
|                     ? LabResultItemView(
 | |
|                         onTap: () {},
 | |
|                         labOrder: null,
 | |
|                         index: 0,
 | |
|                         isLoading: true,
 | |
|                       ).paddingSymmetrical(24.h, 24.h)
 | |
|                     : insuranceVM.patientInsuranceList.isNotEmpty
 | |
|                         ? Padding(
 | |
|                             padding: EdgeInsets.only(top: 24.h),
 | |
|                             child: PatientInsuranceCard(
 | |
|                                 insuranceCardDetailsModel: insuranceVM.patientInsuranceList.first,
 | |
|                                 isInsuranceExpired: DateTime.now().isAfter(DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo))),
 | |
|                           )
 | |
|                         : Padding(
 | |
|                             padding: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.12),
 | |
|                             child: Utils.getNoDataWidget(
 | |
|                               context,
 | |
|                               noDataText: "You don't have insurance registered with HMG.".needTranslation,
 | |
|                               callToActionButton: CustomButton(
 | |
|                                 icon: AppAssets.update_insurance_card_icon,
 | |
|                                 iconColor: AppColors.successColor,
 | |
|                                 iconSize: 15.h,
 | |
|                                 text: "${LocaleKeys.updateInsurance.tr(context: context)} ${LocaleKeys.updateInsuranceSubtitle.tr(context: context)}",
 | |
|                                 onPressed: () {
 | |
|                                   insuranceViewModel.setIsInsuranceUpdateDetailsLoading(true);
 | |
|                                   insuranceViewModel.getPatientInsuranceDetailsForUpdate(
 | |
|                                       appState.getAuthenticatedUser()!.patientId.toString(), appState.getAuthenticatedUser()!.patientIdentificationNo.toString());
 | |
|                                   showCommonBottomSheetWithoutHeight(context,
 | |
|                                       child: PatientInsuranceCardUpdateCard(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false);
 | |
|                                 },
 | |
|                                 backgroundColor: AppColors.bgGreenColor.withOpacity(0.20),
 | |
|                                 borderColor: AppColors.bgGreenColor.withOpacity(0.0),
 | |
|                                 textColor: AppColors.bgGreenColor,
 | |
|                                 fontSize: 14,
 | |
|                                 fontWeight: FontWeight.w500,
 | |
|                                 borderRadius: 12,
 | |
|                                 padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
 | |
|                                 height: 40.h,
 | |
|                               ).paddingSymmetrical(64.h, 0.h),
 | |
|                             ),
 | |
|                           ),
 | |
|               ],
 | |
|             );
 | |
|           }),
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |