time picker unified method added.

main_production_RSG
Sikander Saleem 2 months ago
parent 19b6de7ef8
commit c553253917

@ -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/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_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.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/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/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
@ -296,10 +297,9 @@ class _DeliveryInspectionFormViewState extends State<DeliveryInspectionFormView>
from: DateTime(DateTime.now().year, 1, 1), from: DateTime(DateTime.now().year, 1, 1),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) async { onDatePicker: (selectedDate) async {
final selectedTime = await showTimePicker( final selectedTime = await showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
builder: _timePickerThemeBuilder,
); );
if (selectedTime == null) return; if (selectedTime == null) return;
@ -334,10 +334,9 @@ class _DeliveryInspectionFormViewState extends State<DeliveryInspectionFormView>
return; return;
} }
final selectedTime = await showTimePicker( final selectedTime = await showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
builder: _timePickerThemeBuilder,
); );
if (selectedTime == null) return; if (selectedTime == null) return;
@ -422,37 +421,6 @@ class _DeliveryInspectionFormViewState extends State<DeliveryInspectionFormView>
return '${hours.toStringAsFixed(2)} hours'; 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() { Widget inspectionDetails() {
return Column( return Column(

@ -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_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.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/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/e_signature/e_signature.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart';
@ -95,49 +96,45 @@ class _UpdateEndUserCostCenterDetailsViewState extends State<UpdateEndUserCostCe
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: DefaultAppBar( appBar: DefaultAppBar(title: 'End-User Acceptance'.addTranslation),
title: 'End-User Acceptance'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
body: Form( body: Form(
key: _formKey, key: _formKey,
child: Column( child: Column(
children: [ children: [
SingleChildScrollView( SingleChildScrollView(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
inspectionDetailsForm().toShadowContainer(context, borderRadius: 20, padding: 12), inspectionDetailsForm().toShadowContainer(context, borderRadius: 20, padding: 12),
///Need to implement later as discuss with Ahmed. ///Need to implement later as discuss with Ahmed.
// Text( // Text(
// "Acceptance Form", // "Acceptance Form",
// style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10), // style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10),
// ), // ),
// 6.height, // 6.height,
// Row( // Row(
// children: [ // children: [
// 'warning_icon'.toSvgAsset(height: 16, width: 16), // 'warning_icon'.toSvgAsset(height: 16, width: 16),
// 6.width, // 6.width,
// Text( // Text(
// 'Review the acceptance form'.addTranslation, // 'Review the acceptance form'.addTranslation,
// style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120), // style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
// ), // ),
// 6.width, // 6.width,
// 'web_link_icon'.toSvgAsset(height: 20, width: 20), // 'web_link_icon'.toSvgAsset(height: 20, width: 20),
// ], // ],
// ), // ),
20.height, 20.height,
Text( Text(
"Items", "Items",
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10), style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10),
), ),
16.height, 16.height,
endUserAssetList(context), endUserAssetList(context),
], ],
)) )).expanded,
.expanded,
FooterActionButton.footerContainer(context: context, child: AppFilledButton(buttonColor: AppColor.primary10, label: 'Save'.addTranslation, maxWidth: true, onPressed: _saveTap)), FooterActionButton.footerContainer(context: context, child: AppFilledButton(buttonColor: AppColor.primary10, label: 'Save'.addTranslation, maxWidth: true, onPressed: _saveTap)),
], ],
), ),
@ -189,27 +186,9 @@ class _UpdateEndUserCostCenterDetailsViewState extends State<UpdateEndUserCostCe
from: DateTime(DateTime.now().year, 1, 1), from: DateTime(DateTime.now().year, 1, 1),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), 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) { ).then((selectedTime) {
if (selectedTime != null) { if (selectedTime != null) {
model.acceptanceDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); model.acceptanceDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);

@ -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/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.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/date_picker.dart';
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import '../../../../models/new_models/department.dart'; import '../../../../models/new_models/department.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart';
@ -322,27 +323,9 @@ class _UpdateChildAssetViewState extends State<UpdateChildAssetView> {
// from: widget.pickerFromDate, // from: widget.pickerFromDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), 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) { ).then((selectedTime) {
if (selectedTime != null) { if (selectedTime != null) {
model.installationDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); model.installationDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);

@ -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/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.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/date_picker.dart';
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import '../../../../models/new_models/department.dart'; import '../../../../models/new_models/department.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../../new_views/common_widgets/default_app_bar.dart';
@ -102,10 +103,7 @@ class _UpdateParentAssetViewState extends State<UpdateParentAssetView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: DefaultAppBar( appBar: DefaultAppBar(title: 'Parent Details'.addTranslation),
title: 'Parent Details'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
body: Form( body: Form(
key: _formKey, key: _formKey,
child: Consumer<AssetDeliveryProvider>(builder: (context, provider, child) { child: Consumer<AssetDeliveryProvider>(builder: (context, provider, child) {
@ -386,27 +384,9 @@ class _UpdateParentAssetViewState extends State<UpdateParentAssetView> {
from: DateTime(DateTime.now().year, 1, 1), from: DateTime(DateTime.now().year, 1, 1),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), 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) { ).then((selectedTime) {
if (selectedTime != null) { if (selectedTime != null) {
model.installationDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); model.installationDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);

@ -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/service_request_providers/reject_reason_provider.dart';
import 'package:test_sa/providers/work_order/need_visit_reminder_time_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/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/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
@ -71,7 +72,7 @@ class ServiceRequestBottomSheet {
date: requestDetailProvider.fixRemotelyHelperModel?.startDate, date: requestDetailProvider.fixRemotelyHelperModel?.startDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -110,7 +111,7 @@ class ServiceRequestBottomSheet {
date: requestDetailProvider.fixRemotelyHelperModel?.endDate, date: requestDetailProvider.fixRemotelyHelperModel?.endDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -248,7 +249,7 @@ class ServiceRequestBottomSheet {
date: requestDetailProvider.needVisitHelperModel?.visitDate, date: requestDetailProvider.needVisitHelperModel?.visitDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -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/reason_provider.dart';
import 'package:test_sa/providers/work_order/wo_frame_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/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'; import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
class VerifyAssetDetails extends StatefulWidget { class VerifyAssetDetails extends StatefulWidget {
@ -141,72 +142,9 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
date: DateTime.tryParse(updateAssetModel?.returnToService ?? ""), date: DateTime.tryParse(updateAssetModel?.returnToService ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), 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) { ).then((selectedTime) {
// Handle the selected date and time here. // Handle the selected date and time here.
if (selectedTime != null) { if (selectedTime != null) {
@ -321,72 +259,9 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
date: DateTime.tryParse(updateAssetModel?.edd ?? ""), date: DateTime.tryParse(updateAssetModel?.edd ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), 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) { ).then((selectedTime) {
// Handle the selected date and time here. // Handle the selected date and time here.
if (selectedTime != null) { if (selectedTime != null) {

@ -1,3 +1,4 @@
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -111,7 +112,7 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate, date: requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees?.startDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -153,7 +154,7 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
formatDateWithTime: true, formatDateWithTime: true,
to: DateTime.now(), to: DateTime.now(),
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -1,3 +1,4 @@
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
@ -175,7 +176,7 @@ class EmployeeCard extends StatelessWidget {
formatDateWithTime: true, formatDateWithTime: true,
from: requestedDate, from: requestedDate,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -220,7 +221,7 @@ class EmployeeCard extends StatelessWidget {
formatDateWithTime: true, formatDateWithTime: true,
from: requestedDate, from: requestedDate,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -1,3 +1,4 @@
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
@ -141,7 +142,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
from: requestDetailProvider.currentWorkOrder?.data?.requestedDate, from: requestDetailProvider.currentWorkOrder?.data?.requestedDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -185,7 +186,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
date: requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime, date: requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -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/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.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/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/loading_list_notifier.dart';
import 'package:test_sa/providers/lookups/yes_no_lookup_provider.dart'; import 'package:test_sa/providers/lookups/yes_no_lookup_provider.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
@ -637,27 +638,9 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
// enable: widget.enabled ? _tempPickerTimer == null : false, // enable: widget.enabled ? _tempPickerTimer == null : false,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), 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) { ).then((selectedTime) {
if (selectedTime != null) { if (selectedTime != null) {
occurrenceDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); occurrenceDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);

@ -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/new_views/common_widgets/multiple_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.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/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/images/multi_image_picker.dart';
class UpdateDeliveryNotes extends StatefulWidget { class UpdateDeliveryNotes extends StatefulWidget {
@ -98,7 +99,7 @@ class _UpdateDeliveryNotesState extends State<UpdateDeliveryNotes> {
date: formModel.deliveredDate, date: formModel.deliveredDate,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -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/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.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/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/files_list.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
@ -138,7 +139,7 @@ class _UpdateMedicalGasInspectionPageState extends State<UpdateMedicalGasInspect
// date: DateTime.now(), // date: DateTime.now(),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -18,6 +18,7 @@ import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart'; import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart'; import 'package:test_sa/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.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';
class PpmExternalDetailsForm extends StatefulWidget { class PpmExternalDetailsForm extends StatefulWidget {
final List<PreventiveVisitSuppliers>? models; final List<PreventiveVisitSuppliers>? models;
@ -222,7 +223,7 @@ class _ExternalDetailItemState extends State<ExternalDetailItem> {
formatDateWithTime: true, formatDateWithTime: true,
from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''), from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''),
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -266,7 +267,7 @@ class _ExternalDetailItemState extends State<ExternalDetailItem> {
formatDateWithTime: true, formatDateWithTime: true,
from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''), from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''),
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -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/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/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/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/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
@ -220,7 +221,7 @@ class _WoInfoFormState extends State<WoInfoForm> {
from: DateTime.tryParse(widget.planPreventiveVisit.creationDate ?? ''), from: DateTime.tryParse(widget.planPreventiveVisit.creationDate ?? ''),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -5,6 +5,114 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
Future<TimeOfDay?> 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 { class ATimePicker extends StatelessWidget {
final TimeOfDay? time; final TimeOfDay? time;
final String label; final String label;
@ -47,8 +155,6 @@ class ATimePicker extends StatelessWidget {
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
child: Row( child: Row(
children: [ children: [
// enable
// ?
Column( Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -59,7 +165,6 @@ class ATimePicker extends StatelessWidget {
.custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), .custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
], ],
).expanded, ).expanded,
//: label.bodyText(context).paddingOnly(top: 8, bottom: 8),
enable ? 16.width : const Spacer(), enable ? 16.width : const Spacer(),
withIcon withIcon
? icon != null ? icon != null
@ -70,10 +175,10 @@ class ATimePicker extends StatelessWidget {
), ),
).onPress(enable ).onPress(enable
? () async { ? () async {
TimeOfDay initialTime = TimeOfDay.now(); // Use the unified themed time picker
TimeOfDay? pickedTime = await showTimePicker( TimeOfDay? pickedTime = await showThemedTimePicker(
context: context, context: context,
initialTime: initialTime, initialTime: time ?? TimeOfDay.now(),
); );
if (pickedTime != null) { if (pickedTime != null) {

Loading…
Cancel
Save