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
		
	
| 
											3 weeks ago
										 | 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), | ||
|  |                 ), | ||
|  |               ], | ||
|  |             ), | ||
|  |           ], | ||
|  |         ), | ||
|  |       ), | ||
|  |     ); | ||
|  |   } | ||
|  | } |