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.
		
		
		
		
		
			
		
			
				
	
	
		
			131 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			131 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			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/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/emergency_services/emergency_services_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/emergency_services/model/resp_model/ProjectAvgERWaitingTime.dart';
 | |
| import 'package:hmg_patient_app_new/theme/colors.dart';
 | |
| import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 | |
| import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 | |
| import 'package:provider/provider.dart';
 | |
| 
 | |
| class NearestERItem extends StatelessWidget {
 | |
|   final ProjectAvgERWaitingTime nearestERItem;
 | |
|   final bool isLoading;
 | |
| 
 | |
| 
 | |
|   const NearestERItem({ super.key,
 | |
|     required this.nearestERItem,
 | |
|     required this.isLoading
 | |
|   }) ;
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Container(
 | |
|       decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
 | |
|         color: Colors.white,
 | |
|         customBorder: BorderRadius.only(
 | |
|           topLeft: Radius.circular(24.h),
 | |
|           topRight: Radius.circular(24.h),
 | |
|         ),
 | |
|       ),
 | |
|       child: Padding(
 | |
|         padding: EdgeInsets.all(16.h),
 | |
|         child: Column(
 | |
|           crossAxisAlignment: CrossAxisAlignment.start,
 | |
|           children: [
 | |
|             Row(
 | |
|               children: [
 | |
|                 (isLoading || nearestERItem.projectImageURL?.isEmpty == true)
 | |
|                     ? Container(
 | |
|                   width: 24.h,
 | |
|                   height: 24.h,
 | |
|                   decoration: BoxDecoration(
 | |
|                     color: Colors.grey.shade300,
 | |
|                     shape: BoxShape.circle,
 | |
|                   ),
 | |
|                 ).toShimmer2(isShow: isLoading)
 | |
|                     : Utils.buildImgWithNetwork(
 | |
|                   url: nearestERItem.projectImageURL ?? '',
 | |
|                   iconColor: Colors.transparent,
 | |
|                 ).circle(24.h).toShimmer2(isShow: isLoading),
 | |
|                 const SizedBox(width: 12),
 | |
|                 Expanded(
 | |
|                   child: (nearestERItem.projectName?.toText16(
 | |
|                     color: AppColors.textColor,
 | |
|                     weight: FontWeight.w600,
 | |
|                   ) ??
 | |
|                       SizedBox.shrink()).toShimmer2(isShow: isLoading),
 | |
|                 ),
 | |
|                 // TODO: Add hospital icon logic here if needed
 | |
|               ],
 | |
|             ),
 | |
|             SizedBox(height: 8.h),
 | |
|             Row(
 | |
|               spacing: 8.h,
 | |
|               children: [
 | |
|                 AppCustomChipWidget(
 | |
|                   labelText: "${nearestERItem.distanceInKilometers} km".needTranslation,
 | |
|                   icon: AppAssets.location,
 | |
|                   iconHasColor: false,
 | |
|                   labelPadding: EdgeInsetsDirectional.only(start: 4.h, end: 0.h),
 | |
|                   padding: EdgeInsets.all(8.h),
 | |
|                 ).toShimmer2(isShow: isLoading),
 | |
|                 AppCustomChipWidget(
 | |
|                   labelText: "Expected waiting time: ${nearestERItem.getTime()} mins".needTranslation,
 | |
|                   icon: AppAssets.waiting_time_clock,
 | |
|                   iconHasColor: false,
 | |
|                   labelPadding: EdgeInsetsDirectional.only(start: 4.h, end: 0.h),
 | |
|                   padding: EdgeInsets.all(8.h),
 | |
|                 ).toShimmer2(isShow: isLoading),
 | |
|               ],
 | |
|             ),
 | |
|             SizedBox(height: 16.h),
 | |
|             Row(
 | |
|               children: [
 | |
|                 Expanded(
 | |
|                   child: CustomButton(
 | |
|                     text: "View Location on Google Maps".needTranslation,
 | |
|                     iconSize: 18.h,
 | |
|                     icon: AppAssets.location,
 | |
|                     onPressed: () {
 | |
|                       context.read<EmergencyServicesViewModel>().openDirections(destLat:  double.parse(nearestERItem.latitude??"0.0"), destLng: double.parse(nearestERItem.longitude??"0.0") );
 | |
|                     },
 | |
|                     backgroundColor: AppColors.secondaryLightRedColor,
 | |
|                     borderColor: AppColors.secondaryLightRedColor,
 | |
|                     textColor: AppColors.primaryRedColor,
 | |
|                     iconColor: AppColors.primaryRedColor,
 | |
|                     height: 40.h,
 | |
|                     fontSize: 14,
 | |
|                     fontWeight: FontWeight.w500,
 | |
|                   ).toShimmer2(isShow: isLoading),
 | |
|                 ),
 | |
|                 SizedBox(width: 8.h),
 | |
|                 SizedBox(
 | |
|                   height: 40.h,
 | |
|                   width: 40.h,
 | |
|                   child: CustomButton(
 | |
|                     text: '',
 | |
|                     iconSize: 18.h,
 | |
|                     icon: AppAssets.call_fill,
 | |
|                     onPressed: () {
 | |
|                       context.read<EmergencyServicesViewModel>().openDialer( nearestERItem.phonenumber??"");
 | |
| 
 | |
|                     },
 | |
|                     backgroundColor: AppColors.greyColor,
 | |
|                     iconColor: AppColors.textColor,
 | |
|                     borderColor: AppColors.greyColor,
 | |
|                     height: 40.h,
 | |
|                   ).toShimmer2(isShow: isLoading),
 | |
|                 ),
 | |
|               ],
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |