bottom sheets added of region facitlity and hospital.
parent
f15018b0e8
commit
9c2dd721b4
@ -0,0 +1,8 @@
|
||||
enum FacilitySelection{
|
||||
ALL('ALL'),
|
||||
HMG('hmg'),
|
||||
HMC('hmc');
|
||||
|
||||
final String value;
|
||||
const FacilitySelection(this.value);
|
||||
}
|
||||
@ -0,0 +1,88 @@
|
||||
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/theme/colors.dart' show AppColors;
|
||||
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
|
||||
class FacilitySelectionItem extends StatelessWidget {
|
||||
final String svgPath;
|
||||
final String title;
|
||||
final String subTitle;
|
||||
|
||||
const FacilitySelectionItem(
|
||||
{super.key,
|
||||
required this.svgPath,
|
||||
required this.subTitle,
|
||||
required this.title});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 20.h,
|
||||
hasShadow: false,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Utils.buildSvgWithAssets(
|
||||
icon: svgPath,
|
||||
width: 32,
|
||||
height: 32,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
SizedBox(height: 16,),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
info,
|
||||
Utils.buildSvgWithAssets(
|
||||
icon: AppAssets.forward_arrow_icon,
|
||||
iconColor: AppColors.blackColor,
|
||||
width: 18,
|
||||
height: 13,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
).paddingAll(16.h),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Widget get info => Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 16.h,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
subTitle,
|
||||
style: TextStyle(
|
||||
fontSize: 12.h,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.greyTextColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
@ -0,0 +1,79 @@
|
||||
import 'package:easy_localization/easy_localization.dart'
|
||||
show tr, StringTranslateExtension;
|
||||
import 'package:flutter/cupertino.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/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/appointment_via_region_viewmodel.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'
|
||||
show MyAppointmentsViewModel;
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:provider/provider.dart' show Provider;
|
||||
|
||||
class FacilityTypeSelectionWidget extends StatelessWidget {
|
||||
late MyAppointmentsViewModel myAppointmentsViewModel;
|
||||
late AppointmentViaRegionViewmodel regionalViewModel;
|
||||
final String selectedRegion;
|
||||
|
||||
FacilityTypeSelectionWidget({super.key, required this.selectedRegion});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
myAppointmentsViewModel = Provider.of<MyAppointmentsViewModel>(context);
|
||||
regionalViewModel = Provider.of<AppointmentViaRegionViewmodel>(context);
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
LocaleKeys.selectFacility.tr(),
|
||||
style: TextStyle(
|
||||
fontSize: 21,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
LocaleKeys.selectFacilitiesSubTitle,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.greyTextColor,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 24.h),
|
||||
FacilitySelectionItem(
|
||||
svgPath: AppAssets.hmg,
|
||||
title: "HMG".needTranslation,
|
||||
subTitle: LocaleKeys.hospitalsWithCount.tr(namedArgs: {
|
||||
'count':
|
||||
"${myAppointmentsViewModel.hospitalList?.registeredDoctorMap?[selectedRegion]?.hmgSize ?? 0}"
|
||||
}),
|
||||
).onPress(
|
||||
() {
|
||||
regionalViewModel.setFacility(FacilitySelection.HMG.name);
|
||||
regionalViewModel.setBottomSheetState(
|
||||
AppointmentViaRegionState.HOSPITAL_SELECTION);
|
||||
},
|
||||
),
|
||||
SizedBox(height: 16.h),
|
||||
FacilitySelectionItem(
|
||||
svgPath: AppAssets.hmc,
|
||||
title: "HMC".needTranslation,
|
||||
subTitle: LocaleKeys.medicalCentersWithCount.tr(namedArgs: {
|
||||
'count':
|
||||
"${myAppointmentsViewModel.hospitalList?.registeredDoctorMap?[selectedRegion]?.hmcSize ?? 0}"
|
||||
})).onPress(
|
||||
() {
|
||||
regionalViewModel.setFacility(FacilitySelection.HMC.name);
|
||||
regionalViewModel.setBottomSheetState(
|
||||
AppointmentViaRegionState.HOSPITAL_SELECTION);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,109 @@
|
||||
import 'package:easy_localization/easy_localization.dart'
|
||||
show tr, StringTranslateExtension;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/enums.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/appointment_via_region_viewmodel.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/appointments/widgets/hospital_bottom_sheet/type_selection_widget.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart' show AppColors;
|
||||
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class HospitalBottomSheetBody extends StatelessWidget {
|
||||
late MyAppointmentsViewModel appointmentsViewModel;
|
||||
late AppointmentViaRegionViewmodel regionalViewModel;
|
||||
final TextEditingController searchText = TextEditingController();
|
||||
|
||||
HospitalBottomSheetBody({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
appointmentsViewModel = Provider.of<MyAppointmentsViewModel>(context);
|
||||
regionalViewModel = Provider.of<AppointmentViaRegionViewmodel>(context);
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
LocaleKeys.selectHospital.tr(),
|
||||
style: TextStyle(
|
||||
fontSize: 21,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
LocaleKeys.selectHospitalSubTitle.tr(),
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.greyTextColor,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16.h),
|
||||
TextInputWidget(
|
||||
labelText: LocaleKeys.search.tr(),
|
||||
hintText: "Search Hospital".tr(),
|
||||
controller: searchText,
|
||||
onChange: (value) {
|
||||
appointmentsViewModel.filterHospitalListByString(value, regionalViewModel.selectedRegionId , regionalViewModel.selectedFacilityType ==
|
||||
FacilitySelection.HMG.name);
|
||||
},
|
||||
isEnable: true,
|
||||
prefix: null,
|
||||
autoFocus: false,
|
||||
isBorderAllowed: false,
|
||||
keyboardType: TextInputType.text,
|
||||
isAllowLeadingIcon: true,
|
||||
selectionType: SelectionTypeEnum.search,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: ResponsiveExtension(10).h,
|
||||
horizontal: ResponsiveExtension(15).h,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 24.h),
|
||||
// TypeSelectionWidget(
|
||||
// hmcCount: "0",
|
||||
// hmgCount: "0",
|
||||
// ),
|
||||
// SizedBox(height: 21.h),
|
||||
SizedBox(
|
||||
height: MediaQuery.sizeOf(context).height * .4,
|
||||
child: ListView.separated(
|
||||
itemBuilder: (_, index) => HospitalListItem(
|
||||
hospitalData: regionalViewModel.selectedFacilityType ==
|
||||
FacilitySelection.HMG.name
|
||||
? appointmentsViewModel
|
||||
.filteredHospitalList!
|
||||
.registeredDoctorMap![
|
||||
regionalViewModel.selectedRegionId!]!
|
||||
.hmgDoctorList![index]
|
||||
: appointmentsViewModel
|
||||
.filteredHospitalList
|
||||
?.registeredDoctorMap?[
|
||||
regionalViewModel.selectedRegionId!]
|
||||
?.hmcDoctorList?[index],
|
||||
isLocationEnabled: appointmentsViewModel.getLocationStatus(),
|
||||
),
|
||||
separatorBuilder: (_, __) => SizedBox(
|
||||
height: 16.h,
|
||||
),
|
||||
itemCount: (regionalViewModel.selectedFacilityType ==
|
||||
FacilitySelection.HMG.name
|
||||
? (appointmentsViewModel.filteredHospitalList?.registeredDoctorMap?[
|
||||
regionalViewModel.selectedRegionId]?.hmgDoctorList)
|
||||
: (appointmentsViewModel
|
||||
.filteredHospitalList
|
||||
?.registeredDoctorMap?[
|
||||
regionalViewModel.selectedRegionId]?.hmcDoctorList))?.length ??
|
||||
0),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,113 @@
|
||||
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/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/my_appointments/models/resp_models/doctor_list_api_response.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
|
||||
|
||||
class HospitalListItem extends StatelessWidget {
|
||||
final PatientDoctorAppointmentList? hospitalData;
|
||||
final bool isLocationEnabled;
|
||||
|
||||
late AppState appState;
|
||||
|
||||
HospitalListItem(
|
||||
{super.key, required this.hospitalData, required this.isLocationEnabled});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
appState = getIt.get<AppState>();
|
||||
return DecoratedBox(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 20.h,
|
||||
hasShadow: false,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
spacing: 8.h,
|
||||
children: [hospitalName, distanceInfo],
|
||||
),
|
||||
),
|
||||
Utils.buildSvgWithAssets(
|
||||
icon: AppAssets.forward_arrow_icon,
|
||||
iconColor: AppColors.blackColor,
|
||||
width: 18,
|
||||
height: 13,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
],
|
||||
).paddingSymmetrical(16.h, 16.h),
|
||||
);
|
||||
}
|
||||
|
||||
Widget get hospitalName => Row(
|
||||
children: [
|
||||
Utils.buildSvgWithAssets(
|
||||
icon: (hospitalData?.isHMC == true) ? AppAssets.hmc : AppAssets.hmg,
|
||||
).paddingOnly(right: 10),
|
||||
Expanded(
|
||||
child: Text(
|
||||
hospitalData?.filterName ?? "",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16,
|
||||
color: AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
Widget get distanceInfo => Row(
|
||||
|
||||
children: [
|
||||
Visibility(
|
||||
visible: (hospitalData?.distanceInKMs != "0"),
|
||||
child:
|
||||
|
||||
|
||||
AppCustomChipWidget(
|
||||
labelText:
|
||||
"${hospitalData?.distanceInKMs ?? ""} km".needTranslation,
|
||||
deleteIcon: AppAssets.location_red,
|
||||
deleteIconSize: Size(9, 12),
|
||||
backgroundColor: AppColors.secondaryLightRedColor,
|
||||
textColor: AppColors.errorColor,
|
||||
),
|
||||
|
||||
|
||||
),
|
||||
Visibility(
|
||||
visible: (hospitalData?.distanceInKMs == "0"),
|
||||
child: Row(
|
||||
children: [
|
||||
AppCustomChipWidget(
|
||||
labelText: "Distance not available".needTranslation,
|
||||
textColor: AppColors.blackColor,
|
||||
),
|
||||
SizedBox(width: 8.h,)
|
||||
|
||||
],
|
||||
)),
|
||||
Visibility(
|
||||
visible: !isLocationEnabled,
|
||||
child: AppCustomChipWidget(
|
||||
labelText: "Location turned off".needTranslation,
|
||||
deleteIcon: AppAssets.location_unavailable,
|
||||
deleteIconSize: Size(9, 12),
|
||||
textColor: AppColors.blackColor,
|
||||
)),
|
||||
],
|
||||
);
|
||||
}
|
||||
@ -0,0 +1,93 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_assets.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/my_appointments/models/facility_selection.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
|
||||
import 'package:provider/provider.dart' show Consumer;
|
||||
|
||||
class TypeSelectionWidget extends StatelessWidget {
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const TypeSelectionWidget(
|
||||
{super.key, required this.hmcCount, required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<MyAppointmentsViewModel>(
|
||||
builder: (_, data, __) => Row(
|
||||
spacing: 8,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
AppCustomChipWidget(
|
||||
labelText: "All Facilities".needTranslation,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
color: data.currentlySelectedFacility == FacilitySelection.ALL
|
||||
? AppColors.errorColor
|
||||
: AppColors.chipBorderColorOpacity20,
|
||||
width: 1,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(10)),
|
||||
backgroundColor:
|
||||
data.currentlySelectedFacility == FacilitySelection.ALL
|
||||
? AppColors.secondaryLightRedColor
|
||||
: AppColors.whiteColor,
|
||||
textColor: data.currentlySelectedFacility == FacilitySelection.ALL
|
||||
? AppColors.errorColor
|
||||
: AppColors.blackColor,
|
||||
).onPress((){
|
||||
data.setSelectedFacility(FacilitySelection.ALL);
|
||||
}),
|
||||
AppCustomChipWidget(
|
||||
icon: AppAssets.hmg,
|
||||
iconHasColor: false,
|
||||
labelText: "Hospitals".needTranslation,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
color: data.currentlySelectedFacility == FacilitySelection.HMG
|
||||
? AppColors.errorColor
|
||||
: AppColors.chipBorderColorOpacity20,
|
||||
width: 1,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(10)),
|
||||
backgroundColor:
|
||||
data.currentlySelectedFacility == FacilitySelection.HMG
|
||||
? AppColors.secondaryLightRedColor
|
||||
: AppColors.whiteColor,
|
||||
textColor: data.currentlySelectedFacility == FacilitySelection.HMG
|
||||
? AppColors.errorColor
|
||||
: AppColors.blackColor,
|
||||
).onPress((){
|
||||
data.setSelectedFacility(FacilitySelection.HMG);
|
||||
}),
|
||||
AppCustomChipWidget(
|
||||
icon: AppAssets.hmc,
|
||||
iconHasColor: false,
|
||||
labelText: "Medical Centers".needTranslation,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
color: data.currentlySelectedFacility == FacilitySelection.HMC
|
||||
? AppColors.errorColor
|
||||
: AppColors.chipBorderColorOpacity20,
|
||||
width: 1,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(10)),
|
||||
backgroundColor:
|
||||
data.currentlySelectedFacility == FacilitySelection.HMC
|
||||
? AppColors.secondaryLightRedColor
|
||||
: AppColors.whiteColor,
|
||||
textColor: data.currentlySelectedFacility == FacilitySelection.HMC
|
||||
? AppColors.errorColor
|
||||
: AppColors.blackColor,
|
||||
).onPress((){
|
||||
data.setSelectedFacility(FacilitySelection.HMC);
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,114 @@
|
||||
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/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart' show AppColors;
|
||||
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
|
||||
|
||||
class RegionListItem extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
final String subTitle;
|
||||
|
||||
const RegionListItem(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.subTitle,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 20.h,
|
||||
hasShadow: false,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
header,
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
spacing: 8.h,
|
||||
children: [
|
||||
placesCountItem(
|
||||
AppAssets.hmg, hmgCount, " ${LocaleKeys.hospital.tr()}"),
|
||||
placesCountItem(AppAssets.hmc, hmcCount,
|
||||
" ${LocaleKeys.medicalCenters.tr()}"),
|
||||
],
|
||||
),
|
||||
Utils.buildSvgWithAssets(
|
||||
icon: AppAssets.forward_arrow_icon,
|
||||
iconColor: AppColors.blackColor,
|
||||
width: 18,
|
||||
height: 13,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
).paddingAll(16.h),
|
||||
);
|
||||
}
|
||||
|
||||
Widget placesCountItem(String svgPath, String count, String title) {
|
||||
return AppCustomChipWidget(
|
||||
iconSize: 14,
|
||||
icon: svgPath,
|
||||
iconHasColor: false,
|
||||
richText: RichText(
|
||||
text: TextSpan(
|
||||
text: count,
|
||||
style: TextStyle(
|
||||
fontSize: 12.h,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.blackColor),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: title,
|
||||
style: TextStyle(
|
||||
fontSize: 12.h,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.blackColor))
|
||||
])),
|
||||
);
|
||||
}
|
||||
|
||||
Widget get header => Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 16.h,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
subTitle,
|
||||
style: TextStyle(
|
||||
fontSize: 12.h,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.greyTextColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
@ -0,0 +1,86 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/utils.dart' show Utils;
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/appointment_via_region_viewmodel.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'
|
||||
show MyAppointmentsViewModel;
|
||||
import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart'
|
||||
show RegionListItem;
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class RegionBottomSheetBody extends StatefulWidget {
|
||||
|
||||
const RegionBottomSheetBody({super.key});
|
||||
|
||||
@override
|
||||
State<RegionBottomSheetBody> createState() => _RegionBottomSheetBodyState();
|
||||
}
|
||||
|
||||
class _RegionBottomSheetBodyState extends State<RegionBottomSheetBody> {
|
||||
late MyAppointmentsViewModel myAppointmentsViewModel;
|
||||
late AppointmentViaRegionViewmodel regionalViewModel;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
scheduleMicrotask(() {
|
||||
myAppointmentsViewModel.getRegionMappedProjectList();
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
myAppointmentsViewModel = Provider.of<MyAppointmentsViewModel>(context);
|
||||
regionalViewModel = Provider.of<AppointmentViaRegionViewmodel>(context);
|
||||
return Consumer<MyAppointmentsViewModel>(
|
||||
builder: (context, myAppointmentsVM, child) {
|
||||
if (myAppointmentsVM.isRegionListLoading) {
|
||||
return Container(
|
||||
height: MediaQuery.of(context).size.height * 0.3,
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(16)),
|
||||
),
|
||||
child: Center(
|
||||
child: Utils.getLoadingWidget(),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.5,
|
||||
child: ListView.separated(
|
||||
itemCount:
|
||||
myAppointmentsVM.hospitalList?.registeredDoctorMap?.length ??
|
||||
0,
|
||||
separatorBuilder: (_, __) {
|
||||
return SizedBox(
|
||||
height: 16.h,
|
||||
);
|
||||
},
|
||||
itemBuilder: (_, index) {
|
||||
String key = myAppointmentsVM
|
||||
.hospitalList?.registeredDoctorMap?.keys
|
||||
.toList()[index] ??
|
||||
'';
|
||||
return RegionListItem(
|
||||
title: key,
|
||||
subTitle: "",
|
||||
hmcCount:
|
||||
"${myAppointmentsVM.hospitalList?.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
hmgCount:
|
||||
"${myAppointmentsVM.hospitalList?.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
).onPress(() {
|
||||
regionalViewModel.setSelectedRegionId(key);
|
||||
regionalViewModel.setBottomSheetState(AppointmentViaRegionState.TYPE_SELECTION);
|
||||
});
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue