diff --git a/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart b/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart index be2fa195..39e097b4 100644 --- a/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart +++ b/lib/modules/asset_delivery_module/pages/delivery_inspection/delivery_inspection_form_view.dart @@ -28,6 +28,7 @@ import 'package:test_sa/modules/cm_module/views/components/action_button/footer_ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; @@ -296,10 +297,9 @@ class _DeliveryInspectionFormViewState extends State from: DateTime(DateTime.now().year, 1, 1), formatDateWithTime: true, onDatePicker: (selectedDate) async { - final selectedTime = await showTimePicker( + final selectedTime = await showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: _timePickerThemeBuilder, ); if (selectedTime == null) return; @@ -334,10 +334,9 @@ class _DeliveryInspectionFormViewState extends State return; } - final selectedTime = await showTimePicker( + final selectedTime = await showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: _timePickerThemeBuilder, ); if (selectedTime == null) return; @@ -422,37 +421,6 @@ class _DeliveryInspectionFormViewState extends State return '${hours.toStringAsFixed(2)} hours'; } - Widget _timePickerThemeBuilder(BuildContext context, Widget? child) { - final ThemeData currentTheme = Theme.of(context); - - return Theme( - data: currentTheme.copyWith( - timePickerTheme: TimePickerThemeData( - dialHandColor: AppColor.primary10, - dialBackgroundColor: Colors.grey.withOpacity(0.1), - hourMinuteColor: MaterialStateColor.resolveWith( - (states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.grey.withOpacity(0.1), - ), - dayPeriodColor: MaterialStateColor.resolveWith( - (states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent, - ), - dayPeriodTextColor: MaterialStateColor.resolveWith( - (states) => states.contains(MaterialState.selected) ? Colors.white : AppColor.primary10, - ), - dayPeriodBorderSide: BorderSide( - color: Colors.grey.withOpacity(0.2), - ), - entryModeIconColor: AppColor.primary10, - ), - textButtonTheme: TextButtonThemeData( - style: TextButton.styleFrom( - foregroundColor: AppColor.primary10, - ), - ), - ), - child: child!, - ); - } Widget inspectionDetails() { return Column( diff --git a/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_cost_center_details_view.dart b/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_cost_center_details_view.dart index 15bbc980..ba82f75f 100644 --- a/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_cost_center_details_view.dart +++ b/lib/modules/asset_delivery_module/pages/end_user_acceptance/update_end_user_cost_center_details_view.dart @@ -20,6 +20,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart'; @@ -95,49 +96,45 @@ class _UpdateEndUserCostCenterDetailsViewState extends State states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.grey.withOpacity(0.1)), - dayPeriodColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent), - dayPeriodTextColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? Colors.white : AppColor.primary10), - dayPeriodBorderSide: BorderSide(color: Colors.grey.withOpacity(0.2)), - entryModeIconColor: AppColor.primary10, - ), - textButtonTheme: TextButtonThemeData(style: TextButton.styleFrom(foregroundColor: AppColor.primary10)), - ), - child: child!, - ); - }, ).then((selectedTime) { if (selectedTime != null) { model.acceptanceDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); diff --git a/lib/modules/asset_delivery_module/pages/technical_inpection/update_child_asset_view.dart b/lib/modules/asset_delivery_module/pages/technical_inpection/update_child_asset_view.dart index ca32ac11..47b77cef 100644 --- a/lib/modules/asset_delivery_module/pages/technical_inpection/update_child_asset_view.dart +++ b/lib/modules/asset_delivery_module/pages/technical_inpection/update_child_asset_view.dart @@ -21,6 +21,7 @@ import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import '../../../../models/new_models/department.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart'; @@ -322,27 +323,9 @@ class _UpdateChildAssetViewState extends State { // from: widget.pickerFromDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: (BuildContext context, Widget? child) { - final ThemeData currentTheme = Theme.of(context); - return Theme( - data: currentTheme.copyWith( - timePickerTheme: TimePickerThemeData( - dialHandColor: AppColor.primary10, - dialBackgroundColor: Colors.grey.withOpacity(0.1), - hourMinuteColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.grey.withOpacity(0.1)), - dayPeriodColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent), - dayPeriodTextColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? Colors.white : AppColor.primary10), - dayPeriodBorderSide: BorderSide(color: Colors.grey.withOpacity(0.2)), - entryModeIconColor: AppColor.primary10, - ), - textButtonTheme: TextButtonThemeData(style: TextButton.styleFrom(foregroundColor: AppColor.primary10)), - ), - child: child!, - ); - }, ).then((selectedTime) { if (selectedTime != null) { model.installationDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); diff --git a/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart b/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart index ecd22117..22ee28f2 100644 --- a/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart +++ b/lib/modules/asset_delivery_module/pages/technical_inpection/update_parent_asset_view.dart @@ -24,6 +24,7 @@ import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import '../../../../models/new_models/department.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart'; @@ -102,10 +103,7 @@ class _UpdateParentAssetViewState extends State { Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, - appBar: DefaultAppBar( - title: 'Parent Details'.addTranslation, - titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ), + appBar: DefaultAppBar(title: 'Parent Details'.addTranslation), body: Form( key: _formKey, child: Consumer(builder: (context, provider, child) { @@ -386,27 +384,9 @@ class _UpdateParentAssetViewState extends State { from: DateTime(DateTime.now().year, 1, 1), formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: (BuildContext context, Widget? child) { - final ThemeData currentTheme = Theme.of(context); - return Theme( - data: currentTheme.copyWith( - timePickerTheme: TimePickerThemeData( - dialHandColor: AppColor.primary10, - dialBackgroundColor: Colors.grey.withOpacity(0.1), - hourMinuteColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.grey.withOpacity(0.1)), - dayPeriodColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent), - dayPeriodTextColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? Colors.white : AppColor.primary10), - dayPeriodBorderSide: BorderSide(color: Colors.grey.withOpacity(0.2)), - entryModeIconColor: AppColor.primary10, - ), - textButtonTheme: TextButtonThemeData(style: TextButton.styleFrom(foregroundColor: AppColor.primary10)), - ), - child: child!, - ); - }, ).then((selectedTime) { if (selectedTime != null) { model.installationDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); diff --git a/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart index f149de8a..d15e2a81 100644 --- a/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -29,6 +29,7 @@ import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart'; import 'package:test_sa/providers/work_order/need_visit_reminder_time_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; @@ -71,7 +72,7 @@ class ServiceRequestBottomSheet { date: requestDetailProvider.fixRemotelyHelperModel?.startDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { @@ -110,7 +111,7 @@ class ServiceRequestBottomSheet { date: requestDetailProvider.fixRemotelyHelperModel?.endDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { @@ -248,7 +249,7 @@ class ServiceRequestBottomSheet { date: requestDetailProvider.needVisitHelperModel?.visitDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/modules/cm_module/views/forms/asset_retired/verify_asset_detail.dart b/lib/modules/cm_module/views/forms/asset_retired/verify_asset_detail.dart index ad1ac5ae..bb823892 100644 --- a/lib/modules/cm_module/views/forms/asset_retired/verify_asset_detail.dart +++ b/lib/modules/cm_module/views/forms/asset_retired/verify_asset_detail.dart @@ -27,6 +27,7 @@ import 'package:test_sa/providers/work_order/fault_description_provider.dart'; import 'package:test_sa/providers/work_order/reason_provider.dart'; import 'package:test_sa/providers/work_order/wo_frame_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/views/widgets/equipment/pick_asset.dart'; class VerifyAssetDetails extends StatefulWidget { @@ -141,72 +142,9 @@ class _VerifyAssetDetailsState extends State with TickerProv date: DateTime.tryParse(updateAssetModel?.returnToService ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: (BuildContext context, Widget? child) { - return Theme( - data: Theme.of(context).copyWith( - timePickerTheme: TimePickerThemeData( - backgroundColor: AppColor.bottomSheetColor(context), - hourMinuteShape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - side: BorderSide(color: AppColor.borderColor(context)), - ), - dayPeriodBorderSide: BorderSide(color: AppColor.borderColor(context)), - dayPeriodColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return AppColor.primary10; - } - return Colors.transparent; - }), - dayPeriodTextColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return Colors.white; - } - return AppColor.textStyleColor(context); - }), - dialHandColor: AppColor.primary10, - dialBackgroundColor: AppColor.scaffoldBackground(context), - hourMinuteColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return AppColor.primary10; - } - return AppColor.scaffoldBackground(context); - }), - hourMinuteTextColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return Colors.white; - } - return AppColor.textStyleColor(context); - }), - dialTextColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return Colors.white; - } - return AppColor.textStyleColor(context); - }), - entryModeIconColor: AppColor.primary10, - helpTextStyle: TextStyle( - color: AppColor.textStyleColor(context), - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16), - ), - ), - textButtonTheme: TextButtonThemeData( - style: TextButton.styleFrom( - foregroundColor: AppColor.primary10, - textStyle: const TextStyle( - fontWeight: FontWeight.w600, - fontSize: 14, - ), - ), - ), - ), - child: child!, - ); - }, ).then((selectedTime) { // Handle the selected date and time here. if (selectedTime != null) { @@ -321,72 +259,9 @@ class _VerifyAssetDetailsState extends State with TickerProv date: DateTime.tryParse(updateAssetModel?.edd ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: (BuildContext context, Widget? child) { - return Theme( - data: Theme.of(context).copyWith( - timePickerTheme: TimePickerThemeData( - backgroundColor: AppColor.bottomSheetColor(context), - hourMinuteShape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - side: BorderSide(color: AppColor.borderColor(context)), - ), - dayPeriodBorderSide: BorderSide(color: AppColor.borderColor(context)), - dayPeriodColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return AppColor.primary10; - } - return Colors.transparent; - }), - dayPeriodTextColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return Colors.white; - } - return AppColor.textStyleColor(context); - }), - dialHandColor: AppColor.primary10, - dialBackgroundColor: AppColor.scaffoldBackground(context), - hourMinuteColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return AppColor.primary10; - } - return AppColor.scaffoldBackground(context); - }), - hourMinuteTextColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return Colors.white; - } - return AppColor.textStyleColor(context); - }), - dialTextColor: WidgetStateColor.resolveWith((states) { - if (states.contains(WidgetState.selected)) { - return Colors.white; - } - return AppColor.textStyleColor(context); - }), - entryModeIconColor: AppColor.primary10, - helpTextStyle: TextStyle( - color: AppColor.textStyleColor(context), - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16), - ), - ), - textButtonTheme: TextButtonThemeData( - style: TextButton.styleFrom( - foregroundColor: AppColor.primary10, - textStyle: const TextStyle( - fontWeight: FontWeight.w600, - fontSize: 14, - ), - ), - ), - ), - child: child!, - ); - }, ).then((selectedTime) { // Handle the selected date and time here. if (selectedTime != null) { diff --git a/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_card.dart b/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_card.dart index 78e1dbe0..8da1fab7 100644 --- a/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_card.dart +++ b/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_card.dart @@ -1,3 +1,4 @@ +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -111,7 +112,7 @@ class _AssistantEmployeeCardState extends State { date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { @@ -153,7 +154,7 @@ class _AssistantEmployeeCardState extends State { formatDateWithTime: true, to: DateTime.now(), onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_list.dart b/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_list.dart index 879f7e49..d6f1c2db 100644 --- a/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_list.dart +++ b/lib/modules/cm_module/views/forms/maintenance_request/components/assistant_employee_list.dart @@ -1,3 +1,4 @@ +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -175,7 +176,7 @@ class EmployeeCard extends StatelessWidget { formatDateWithTime: true, from: requestedDate, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { @@ -220,7 +221,7 @@ class EmployeeCard extends StatelessWidget { formatDateWithTime: true, from: requestedDate, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart b/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart index 98c26be8..b92cb7e4 100644 --- a/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart +++ b/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart @@ -1,3 +1,4 @@ +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -141,7 +142,7 @@ class _ExternalMaintenanceRequestState extends State from: requestDetailProvider.currentWorkOrder?.data?.requestedDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { @@ -185,7 +186,7 @@ class _ExternalMaintenanceRequestState extends State date: requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/modules/incident_module/create_incident_request_page.dart b/lib/modules/incident_module/create_incident_request_page.dart index 7a96f8e7..dc33c3e2 100644 --- a/lib/modules/incident_module/create_incident_request_page.dart +++ b/lib/modules/incident_module/create_incident_request_page.dart @@ -28,6 +28,7 @@ import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/lookups/yes_no_lookup_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; @@ -637,27 +638,9 @@ class _CreateIncidentRequestPageState extends State { // enable: widget.enabled ? _tempPickerTimer == null : false, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: (BuildContext context, Widget? child) { - final ThemeData currentTheme = Theme.of(context); - return Theme( - data: currentTheme.copyWith( - timePickerTheme: TimePickerThemeData( - dialHandColor: AppColor.primary10, - dialBackgroundColor: Colors.grey.withOpacity(0.1), - hourMinuteColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.grey.withOpacity(0.1)), - dayPeriodColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent), - dayPeriodTextColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? Colors.white : AppColor.primary10), - dayPeriodBorderSide: BorderSide(color: Colors.grey.withOpacity(0.2)), - entryModeIconColor: AppColor.primary10, - ), - textButtonTheme: TextButtonThemeData(style: TextButton.styleFrom(foregroundColor: AppColor.primary10)), - ), - child: child!, - ); - }, ).then((selectedTime) { if (selectedTime != null) { occurrenceDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); diff --git a/lib/modules/medical_gas_inspection/update_delivery_notes_page.dart b/lib/modules/medical_gas_inspection/update_delivery_notes_page.dart index 45f2e604..86cebf54 100644 --- a/lib/modules/medical_gas_inspection/update_delivery_notes_page.dart +++ b/lib/modules/medical_gas_inspection/update_delivery_notes_page.dart @@ -18,6 +18,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; class UpdateDeliveryNotes extends StatefulWidget { @@ -98,7 +99,7 @@ class _UpdateDeliveryNotesState extends State { date: formModel.deliveredDate, formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/modules/medical_gas_inspection/update_medical_gas_inspection_page.dart b/lib/modules/medical_gas_inspection/update_medical_gas_inspection_page.dart index dc338fb8..7175b7e1 100644 --- a/lib/modules/medical_gas_inspection/update_medical_gas_inspection_page.dart +++ b/lib/modules/medical_gas_inspection/update_medical_gas_inspection_page.dart @@ -27,6 +27,7 @@ import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.da import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; @@ -138,7 +139,7 @@ class _UpdateMedicalGasInspectionPageState extends State? models; @@ -222,7 +223,7 @@ class _ExternalDetailItemState extends State { formatDateWithTime: true, from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''), onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { @@ -266,7 +267,7 @@ class _ExternalDetailItemState extends State { formatDateWithTime: true, from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''), onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/modules/pm_module/ppm_wo/update_ppm/wo_info_form.dart b/lib/modules/pm_module/ppm_wo/update_ppm/wo_info_form.dart index 4173f823..86a57d13 100644 --- a/lib/modules/pm_module/ppm_wo/update_ppm/wo_info_form.dart +++ b/lib/modules/pm_module/ppm_wo/update_ppm/wo_info_form.dart @@ -31,6 +31,7 @@ import 'package:test_sa/providers/ppm_service_provider.dart'; import 'package:test_sa/providers/ppm_task_status_provider.dart'; import 'package:test_sa/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/views/widgets/date_and_time/time_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; @@ -220,7 +221,7 @@ class _WoInfoFormState extends State { from: DateTime.tryParse(widget.planPreventiveVisit.creationDate ?? ''), formatDateWithTime: true, onDatePicker: (selectedDate) { - showTimePicker( + showThemedTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { diff --git a/lib/views/widgets/date_and_time/time_picker.dart b/lib/views/widgets/date_and_time/time_picker.dart index dac9a94a..483ce043 100644 --- a/lib/views/widgets/date_and_time/time_picker.dart +++ b/lib/views/widgets/date_and_time/time_picker.dart @@ -5,6 +5,114 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; +Future showThemedTimePicker({ + required BuildContext context, + required TimeOfDay initialTime, + String? helpText, + String? cancelText, + String? confirmText, + TimePickerEntryMode initialEntryMode = TimePickerEntryMode.dial, +}) async { + return await showTimePicker( + context: context, + initialTime: initialTime, + helpText: helpText, + cancelText: cancelText, + confirmText: confirmText, + initialEntryMode: initialEntryMode, + builder: (BuildContext context, Widget? child) { + return Theme( + data: Theme.of(context).copyWith( + timePickerTheme: TimePickerThemeData( + // Background color + backgroundColor: AppColor.bottomSheetColor(context), + + // Hour/Minute input boxes styling + hourMinuteShape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + side: BorderSide(color: AppColor.borderColor(context)), + ), + + // AM/PM selector border + dayPeriodBorderSide: BorderSide(color: AppColor.borderColor(context)), + + // AM/PM selector background color + dayPeriodColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return AppColor.primary10; + } + return Colors.transparent; + }), + + // AM/PM selector text color + dayPeriodTextColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return Colors.white; + } + return AppColor.textStyleColor(context); + }), + + // Clock dial hand color + dialHandColor: AppColor.primary10, + + // Clock dial background + dialBackgroundColor: AppColor.scaffoldBackground(context), + + // Hour/Minute box background color + hourMinuteColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return AppColor.primary10; + } + return AppColor.scaffoldBackground(context); + }), + + // Hour/Minute box text color + hourMinuteTextColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return Colors.white; + } + return AppColor.textStyleColor(context); + }), + + // Clock dial numbers text color + dialTextColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return Colors.white; + } + return AppColor.textStyleColor(context); + }), + + // Entry mode switch icon color + entryModeIconColor: AppColor.primary10, + + // Help text styling + helpTextStyle: TextStyle( + color: AppColor.textStyleColor(context), + ), + + // Dialog shape + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + ), + ), + + // Action buttons (Cancel/OK) styling + textButtonTheme: TextButtonThemeData( + style: TextButton.styleFrom( + foregroundColor: AppColor.primary10, + textStyle: const TextStyle( + fontWeight: FontWeight.w600, + fontSize: 14, + ), + ), + ), + ), + child: child!, + ); + }, + ); +} + class ATimePicker extends StatelessWidget { final TimeOfDay? time; final String label; @@ -47,8 +155,6 @@ class ATimePicker extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), child: Row( children: [ - // enable - // ? Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisSize: MainAxisSize.min, @@ -59,7 +165,6 @@ class ATimePicker extends StatelessWidget { .custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ], ).expanded, - //: label.bodyText(context).paddingOnly(top: 8, bottom: 8), enable ? 16.width : const Spacer(), withIcon ? icon != null @@ -70,10 +175,10 @@ class ATimePicker extends StatelessWidget { ), ).onPress(enable ? () async { - TimeOfDay initialTime = TimeOfDay.now(); - TimeOfDay? pickedTime = await showTimePicker( + // Use the unified themed time picker + TimeOfDay? pickedTime = await showThemedTimePicker( context: context, - initialTime: initialTime, + initialTime: time ?? TimeOfDay.now(), ); if (pickedTime != null) {