diff --git a/assets/images/svg/close_bottom_sheet_icon.svg b/assets/images/svg/close_bottom_sheet_icon.svg new file mode 100644 index 0000000..599ce85 --- /dev/null +++ b/assets/images/svg/close_bottom_sheet_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index 2077440..7f1b6d1 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -71,9 +71,9 @@ class AppAssets { static const String insurance_history_icon = '$svgBasePath/insurance_history_icon.svg'; static const String cancel_circle_icon = '$svgBasePath/cancel_circle.svg'; static const String update_insurance_card_icon = '$svgBasePath/update_insurance_card.svg'; + static const String close_bottom_sheet_icon = '$svgBasePath/close_bottom_sheet_icon.svg'; //bottom navigation// - static const String homeBottom = '$svgBasePath/home_bottom.svg'; static const String bookAppoBottom = '$svgBasePath/book_appo_bottom.svg'; static const String myFilesBottom = '$svgBasePath/my_files_bottom.svg'; diff --git a/lib/features/insurance/insurance_view_model.dart b/lib/features/insurance/insurance_view_model.dart index 545a32a..fac09da 100644 --- a/lib/features/insurance/insurance_view_model.dart +++ b/lib/features/insurance/insurance_view_model.dart @@ -6,6 +6,7 @@ import 'package:hmg_patient_app_new/services/error_handler_service.dart'; class InsuranceViewModel extends ChangeNotifier { bool isInsuranceLoading = false; + bool isInsuranceHistoryLoading = false; InsuranceRepo insuranceRepo; ErrorHandlerService errorHandlerService; @@ -17,10 +18,16 @@ class InsuranceViewModel extends ChangeNotifier { initInsuranceProvider() { patientInsuranceList.clear(); isInsuranceLoading = true; + isInsuranceHistoryLoading = true; getPatientInsuranceDetails(); notifyListeners(); } + setIsInsuranceHistoryLoading(bool val) { + isInsuranceHistoryLoading = val; + notifyListeners(); + } + Future getPatientInsuranceDetails({Function(dynamic)? onSuccess, Function(String)? onError}) async { final result = await insuranceRepo.getPatientInsuranceDetails(patientId: "1231755"); diff --git a/lib/presentation/insurance/insurance_home_page.dart b/lib/presentation/insurance/insurance_home_page.dart index eea50c5..9f9271a 100644 --- a/lib/presentation/insurance/insurance_home_page.dart +++ b/lib/presentation/insurance/insurance_home_page.dart @@ -17,6 +17,8 @@ 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}); @@ -59,14 +61,9 @@ class _InsuranceHomePageState extends State { iconSize: 21.h, text: LocaleKeys.history.tr(context: context), onPressed: () { - showCommonBottomSheet( - context, - child: Container(), - callBackFunc: () {}, - title: "", - height: ResponsiveExtension.screenHeight * 0.5, - isCloseButtonVisible: false, - ); + insuranceVM.setIsInsuranceHistoryLoading(true); + showCommonBottomSheet(context, + child: InsuranceHistory(), callBackFunc: () {}, title: "", height: ResponsiveExtension.screenHeight * 0.5, isCloseButtonVisible: false, isFullScreen: false); }, backgroundColor: AppColors.primaryRedColor.withOpacity(0.1), borderColor: AppColors.primaryRedColor.withOpacity(0.0), diff --git a/lib/presentation/insurance/widgets/insurance_history.dart b/lib/presentation/insurance/widgets/insurance_history.dart new file mode 100644 index 0000000..0708c7c --- /dev/null +++ b/lib/presentation/insurance/widgets/insurance_history.dart @@ -0,0 +1,39 @@ +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/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/extensions/widget_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/widgets/shimmer/movies_shimmer_widget.dart'; +import 'package:provider/provider.dart'; + +class InsuranceHistory extends StatelessWidget { + InsuranceHistory({super.key}); + + late InsuranceViewModel insuranceViewModel; + + @override + Widget build(BuildContext context) { + insuranceViewModel = Provider.of(context); + return Consumer(builder: (context, insuranceVM, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + LocaleKeys.history.tr(context: context).toText24(isBold: true), + Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon).onPress(() { + Navigator.of(context).pop(); + }), + ], + ).paddingSymmetrical(24.h, 24.h), + insuranceVM.isInsuranceHistoryLoading ? const MoviesShimmerWidget().paddingSymmetrical(24.h, 24.h) : Container() + ], + ); + }); + } +} diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart index f3d7425..f6039eb 100644 --- a/lib/widgets/common_bottom_sheet.dart +++ b/lib/widgets/common_bottom_sheet.dart @@ -2,14 +2,19 @@ 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/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/presentation/lab/search_lab_report.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; -void showCommonBottomSheet(BuildContext context, {required Widget child, required VoidCallback callBackFunc, String? title, required double height, bool isCloseButtonVisible = true}) { +void showCommonBottomSheet(BuildContext context, + {required Widget child, required VoidCallback callBackFunc, String? title, required double height, bool isCloseButtonVisible = true, bool isFullScreen = true}) { showModalBottomSheet( + sheetAnimationStyle: AnimationStyle( + duration: Duration(milliseconds: 500), // Custom animation duration + reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration + ), context: context, - isScrollControlled: false, + isScrollControlled: true, showDragHandle: false, backgroundColor: AppColors.scaffoldBgColor, builder: (BuildContext context) { @@ -19,6 +24,7 @@ void showCommonBottomSheet(BuildContext context, {required Widget child, require child: ButtonSheetContent( title: title!, isCloseButtonVisible: isCloseButtonVisible, + isFullScreen: isFullScreen, child: child, ), ); @@ -31,8 +37,9 @@ class ButtonSheetContent extends StatelessWidget { final Widget child; final String title; final bool isCloseButtonVisible; + final bool isFullScreen; - const ButtonSheetContent({super.key, required this.child, required this.isCloseButtonVisible, required this.title}); + const ButtonSheetContent({super.key, required this.child, required this.isCloseButtonVisible, required this.title, required this.isFullScreen}); @override Widget build(BuildContext context) { @@ -42,20 +49,20 @@ class ButtonSheetContent extends StatelessWidget { // SizedBox( // height: 20.h, // ), - Center( - child: Container( - margin: const EdgeInsets.only(top: 18, bottom: 12), - height: 4, - width: 40.h, - decoration: BoxDecoration( - color: Colors.grey[400], - borderRadius: BorderRadius.circular(2), - ), - ), - ), + // Center( + // child: Container( + // margin: const EdgeInsets.only(top: 18, bottom: 12), + // height: 4, + // width: 40.h, + // decoration: BoxDecoration( + // color: Colors.grey[400], + // borderRadius: BorderRadius.circular(2), + // ), + // ), + // ), // Close button - isCloseButtonVisible + isCloseButtonVisible && isFullScreen ? Padding( padding: EdgeInsets.symmetric(horizontal: 16), child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32, height: 32).onPress(() { @@ -64,17 +71,15 @@ class ButtonSheetContent extends StatelessWidget { ) : SizedBox(), - SizedBox( - height: 20, - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16), - child: Text( - title, - style: TextStyle(fontSize: 27.h, fontWeight: FontWeight.bold), - ), - ), - const SizedBox(height: 16), + isFullScreen + ? Column( + children: [ + SizedBox(height: 20.h), + Padding(padding: EdgeInsets.symmetric(horizontal: 16.h), child: title.toText24(isBold: true)), + SizedBox(height: 16.h), + ], + ) + : SizedBox(), Expanded(child: child) ],