Merge remote-tracking branch 'origin/export_module_ui_ux_enhancement' into export_module_ui_ux_enhancement

main_production_RSG
WaseemAbbasi22 2 months ago
commit 27557c0555

@ -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<DeliveryInspectionFormView>
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<DeliveryInspectionFormView>
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<DeliveryInspectionFormView>
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(

@ -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<UpdateEndUserCostCe
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: DefaultAppBar(
title: 'End-User Acceptance'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
appBar: DefaultAppBar(title: 'End-User Acceptance'.addTranslation),
body: Form(
key: _formKey,
child: Column(
children: [
SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
inspectionDetailsForm().toShadowContainer(context, borderRadius: 20, padding: 12),
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
inspectionDetailsForm().toShadowContainer(context, borderRadius: 20, padding: 12),
///Need to implement later as discuss with Ahmed.
// Text(
// "Acceptance Form",
// style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10),
// ),
// 6.height,
// Row(
// children: [
// 'warning_icon'.toSvgAsset(height: 16, width: 16),
// 6.width,
// Text(
// 'Review the acceptance form'.addTranslation,
// style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
// ),
// 6.width,
// 'web_link_icon'.toSvgAsset(height: 20, width: 20),
// ],
// ),
20.height,
Text(
"Items",
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10),
),
16.height,
endUserAssetList(context),
],
))
.expanded,
///Need to implement later as discuss with Ahmed.
// Text(
// "Acceptance Form",
// style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10),
// ),
// 6.height,
// Row(
// children: [
// 'warning_icon'.toSvgAsset(height: 16, width: 16),
// 6.width,
// Text(
// 'Review the acceptance form'.addTranslation,
// style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
// ),
// 6.width,
// 'web_link_icon'.toSvgAsset(height: 20, width: 20),
// ],
// ),
20.height,
Text(
"Items",
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10),
),
16.height,
endUserAssetList(context),
],
)).expanded,
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),
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.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/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<UpdateChildAssetView> {
// 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);

@ -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<UpdateParentAssetView> {
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<AssetDeliveryProvider>(builder: (context, provider, child) {
@ -386,27 +384,9 @@ class _UpdateParentAssetViewState extends State<UpdateParentAssetView> {
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);

@ -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) {

@ -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,7 +142,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
date: DateTime.tryParse(updateAssetModel?.returnToService ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
@ -258,7 +259,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
date: DateTime.tryParse(updateAssetModel?.edd ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {
@ -405,7 +406,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
}),
),
8.width,
Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120)),
Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.textColor(context))),
],
)
],

@ -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<AssistantEmployeeCard> {
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<AssistantEmployeeCard> {
formatDateWithTime: true,
to: DateTime.now(),
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).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: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) {

@ -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<ExternalMaintenanceRequest>
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<ExternalMaintenanceRequest>
date: requestDetailProvider.activityMaintenanceHelperModel?.supplierEndTime,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).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/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<CreateIncidentRequestPage> {
// 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);

@ -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<UpdateDeliveryNotes> {
date: formModel.deliveredDate,
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).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/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<UpdateMedicalGasInspect
// date: DateTime.now(),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).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/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/time_picker.dart';
class PpmExternalDetailsForm extends StatefulWidget {
final List<PreventiveVisitSuppliers>? models;
@ -222,7 +223,7 @@ class _ExternalDetailItemState extends State<ExternalDetailItem> {
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<ExternalDetailItem> {
formatDateWithTime: true,
from: DateTime.tryParse(_ppmProvider?.planPreventiveVisit?.createdDate ?? ''),
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).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/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<WoInfoForm> {
from: DateTime.tryParse(widget.planPreventiveVisit.creationDate ?? ''),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
showTimePicker(
showThemedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
).then((selectedTime) {

@ -266,7 +266,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
Widget _buildActiveFiltersChips() {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
decoration: BoxDecoration(
color: AppColor.background(context),
border: Border(
@ -275,6 +275,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 4,
children: [
Text(
'Active Filters',
@ -289,7 +290,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
height: 40.toScreenHeight,
child: ListView.separated(
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.only(top: 8, right: 0, left: 0, bottom: 0),
padding: EdgeInsets.zero,
itemBuilder: (cxt, index) => _getActiveFilterChips()[index],
separatorBuilder: (cxt, index) => 8.width,
itemCount: _getActiveFilterChips().length),
@ -459,7 +460,6 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
showDelete: false,
));
}
return chips;
}
@ -470,6 +470,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
backgroundColor: AppColor.backgroundTabBarColor(context),
side: BorderSide(color: AppColor.border2Color(context)),
label: Text(label),
visualDensity: VisualDensity.compact,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),
labelStyle: AppTextStyles.tinyFont2.copyWith(color: AppColor.labelTextStyleColor(context)),
deleteIconColor: showDelete ? AppColor.icon2Color(context) : null,

@ -87,36 +87,124 @@ class ADatePicker extends StatelessWidget {
lastDate: to ?? DateTime.now(),
builder: (BuildContext context, Widget? child) {
final ThemeData currentTheme = Theme.of(context);
final bool isDark = context.isDark;
return Theme(
data: currentTheme.copyWith(
datePickerTheme: DatePickerThemeData(
headerBackgroundColor: AppColor.scaffoldBackground(context),
// Header styling
headerBackgroundColor: AppColor.primary10,
headerForegroundColor: Colors.white,
// Background
backgroundColor: AppColor.bottomSheetColor(context),
dayForegroundColor: MaterialStateColor.resolveWith((states) {
if (states.contains(MaterialState.selected)) return Colors.white;
if (states.contains(MaterialState.disabled)) return Colors.grey.withOpacity(0.6);
return currentTheme.colorScheme.onSurface;
// Surface tint removal for clean look
surfaceTintColor: Colors.transparent,
// Day cell styling
dayForegroundColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return Colors.white;
}
if (states.contains(WidgetState.disabled)) {
return isDark ? AppColor.neutral10.withOpacity(0.3) : AppColor.neutral20.withOpacity(0.4);
}
return AppColor.textStyleColor(context);
}),
dayBackgroundColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return AppColor.primary10;
}
return Colors.transparent;
}),
// Today's date styling
todayForegroundColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return Colors.white;
}
return AppColor.primary10;
}),
todayBackgroundColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return AppColor.primary10;
}
return Colors.transparent;
}),
dayBackgroundColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent),
yearForegroundColor: MaterialStateColor.resolveWith((states) {
if (states.contains(MaterialState.selected)) return Colors.white;
if (states.contains(MaterialState.disabled)) return Colors.grey.withOpacity(0.6);
return currentTheme.colorScheme.onSurface;
todayBorder: BorderSide(color: AppColor.primary10, width: 1),
// Year selector styling
yearForegroundColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return Colors.white;
}
if (states.contains(WidgetState.disabled)) {
return isDark ? AppColor.neutral10.withOpacity(0.3) : AppColor.neutral20.withOpacity(0.4);
}
return AppColor.textStyleColor(context);
}),
yearBackgroundColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return AppColor.primary10;
}
return Colors.transparent;
}),
yearBackgroundColor: MaterialStateColor.resolveWith((states) => states.contains(MaterialState.selected) ? AppColor.primary10 : Colors.transparent),
// todayForegroundColor: MaterialStateColor.resolveWith((states) => AppColor.primary10),
// todayBorder: BorderSide(color: AppColor.primary10.withOpacity(0.7)),
dividerColor: Colors.grey.withOpacity(0.2),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
inputDecorationTheme: const InputDecorationTheme(
focusedBorder: UnderlineInputBorder(borderSide: BorderSide(color: AppColor.primary10, width: 2)),
// Weekday labels
weekdayStyle: TextStyle(
color: AppColor.labelTextStyleColor(context),
fontWeight: FontWeight.w600,
),
// Day style
dayStyle: TextStyle(
color: AppColor.textStyleColor(context),
),
// Year style
yearStyle: TextStyle(
color: AppColor.textStyleColor(context),
),
// Divider
dividerColor: AppColor.borderColor(context),
// Shape
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
// Input decoration for text field mode
inputDecorationTheme: InputDecorationTheme(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: AppColor.primary10, width: 2),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: AppColor.borderColor(context)),
),
),
),
// Button styling (Cancel/OK buttons)
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(foregroundColor: AppColor.loadingColor(context)),
style: TextButton.styleFrom(
foregroundColor: AppColor.primary10,
textStyle: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 14,
),
),
),
// Icon theme for navigation arrows
iconTheme: IconThemeData(
color: Colors.white,
),
iconTheme: IconThemeData(color: AppColor.primary10.withOpacity(0.7)),
),
child: child!,
);

@ -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<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 {
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) {

@ -261,7 +261,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
Widget _buildActiveFiltersChips() {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
decoration: BoxDecoration(
color: AppColor.background(context),
border: Border(
@ -270,13 +270,11 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 4,
children: [
Text(
'Active Filters',
style: AppTextStyles.tinyFont2.copyWith(
color: AppColor.labelTextStyleColor(context),
fontWeight: FontWeight.w600,
),
style: AppTextStyles.tinyFont2.copyWith(color: AppColor.labelTextStyleColor(context), fontWeight: FontWeight.w600),
),
Row(
mainAxisSize: MainAxisSize.min,
@ -287,7 +285,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
height: 40.toScreenHeight,
child: ListView.separated(
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.only(top: 8, right: 0, left: 0, bottom: 0),
padding: EdgeInsets.zero,
itemBuilder: (cxt, index) => _getActiveFilterChips()[index],
separatorBuilder: (cxt, index) => 8.width,
itemCount: _getActiveFilterChips().length,
@ -492,13 +490,11 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
Widget _buildFilterChip({required String label, required VoidCallback onDelete}) {
return Theme(
data: Theme.of(context).copyWith(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
),
data: Theme.of(context).copyWith(splashColor: Colors.transparent, highlightColor: Colors.transparent),
child: Chip(
backgroundColor: AppColor.backgroundTabBarColor(context),
side: BorderSide(color: AppColor.border2Color(context)),
visualDensity: VisualDensity.compact,
label: Text(label),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0),

Loading…
Cancel
Save