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

# Conflicts:
#	lib/new_views/common_widgets/app_text_form_field.dart
#	lib/views/widgets/date_and_time/date_picker.dart
#	lib/views/widgets/timer/app_timer.dart
main_production_RSG
WaseemAbbasi22 2 months ago
commit 474a244b55

@ -33,7 +33,7 @@ class RequestCategoryList extends StatelessWidget {
shrinkWrap: true, shrinkWrap: true,
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
separatorBuilder: (cxt, index) => 16.height, separatorBuilder: (cxt, index) => 12.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == list.length) { if (index == list.length) {
return CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 1).center; return CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 1).center;

@ -157,7 +157,7 @@ class DeviceSearch {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
if (code != null && code!.isNotEmpty) map['code'] = code; if (code != null && code!.isNotEmpty) map['code'] = code;
if (assetSerialNumber != null && assetSerialNumber!.isNotEmpty) map['assetSerialNumber'] = assetSerialNumber; if (assetSerialNumber != null && assetSerialNumber!.isNotEmpty) map['assetSerialNumber'] = assetSerialNumber;
if (assetName != null && assetName!.isNotEmpty) map['assetName'] = [assetName]; if (assetName != null && assetName!.isNotEmpty) map['assetName'] = assetName; // todo @discuss baha about multiple asset search
if (supplyDateSymbol != null) { if (supplyDateSymbol != null) {
map['supplyDateSymbol'] = supplyDateSymbol!.toJson(); map['supplyDateSymbol'] = supplyDateSymbol!.toJson();
} }

@ -85,10 +85,7 @@ class _ChatMessagesState {
@override @override
bool operator ==(Object other) => bool operator ==(Object other) =>
identical(this, other) || identical(this, other) ||
other is _ChatMessagesState && other is _ChatMessagesState && isLoading == other.isLoading && messageCount == other.messageCount && lastMessageTime == other.lastMessageTime; // FIX: Compare timestamp to detect new messages
isLoading == other.isLoading &&
messageCount == other.messageCount &&
lastMessageTime == other.lastMessageTime; // FIX: Compare timestamp to detect new messages
@override @override
int get hashCode => Object.hash(isLoading, messageCount, lastMessageTime); int get hashCode => Object.hash(isLoading, messageCount, lastMessageTime);
@ -198,7 +195,7 @@ class _ChatPageState extends State<ChatPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColor.white10, // backgroundColor: AppColor.white10,
appBar: DefaultAppBar(title: widget.title), appBar: DefaultAppBar(title: widget.title),
// OPTIMIZATION: Using Selector for connection state (rarely changes) // OPTIMIZATION: Using Selector for connection state (rarely changes)
// This prevents rebuilding entire chat UI on every message/typing event // This prevents rebuilding entire chat UI on every message/typing event
@ -278,7 +275,7 @@ class _ChatPageState extends State<ChatPage> {
style: AppTextStyles.bodyText.copyWith( style: AppTextStyles.bodyText.copyWith(
color: AppColor.white10, color: AppColor.white10,
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
decorationColor: AppColor.white10, decorationColor: AppColor.white10
), ),
).onPress(() { ).onPress(() {
Navigator.push(context, CupertinoPageRoute(builder: (context) => ViewAllAttachmentPage(moduleId: widget.moduleId, requestId: widget.requestId))); Navigator.push(context, CupertinoPageRoute(builder: (context) => ViewAllAttachmentPage(moduleId: widget.moduleId, requestId: widget.requestId)));
@ -294,7 +291,7 @@ class _ChatPageState extends State<ChatPage> {
messages: provider.chatResponseList, messages: provider.chatResponseList,
), ),
builder: (context, messagesState, _) => Container( builder: (context, messagesState, _) => Container(
color: AppColor.neutral100, // color: AppColor.neutral100,
child: messagesState.isLoading child: messagesState.isLoading
? ListView( ? ListView(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
@ -311,7 +308,7 @@ class _ChatPageState extends State<ChatPage> {
"Send a message to start conversation", "Send a message to start conversation",
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
maxLines: 1, maxLines: 1,
style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50.withOpacity(.5), fontWeight: FontWeight.w500), style: AppTextStyles.heading6.copyWith(color: AppColor.lightTextColor(context), fontWeight: FontWeight.w500),
).center ).center
: ListView.builder( : ListView.builder(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
@ -340,7 +337,7 @@ class _ChatPageState extends State<ChatPage> {
), ),
).expanded, ).expanded,
if (!widget.readOnly) ...[ if (!widget.readOnly) ...[
Divider(height: 1, thickness: 1, color: const Color(0xff767676).withOpacity(.11)), const Divider().defaultStyle(context),
SafeArea( SafeArea(
child: ConstrainedBox( child: ConstrainedBox(
constraints: const BoxConstraints(minHeight: 56), constraints: const BoxConstraints(minHeight: 56),
@ -349,8 +346,8 @@ class _ChatPageState extends State<ChatPage> {
if (chatState == ChatState.idle) ...[ if (chatState == ChatState.idle) ...[
TextFormField( TextFormField(
controller: textEditingController, controller: textEditingController,
cursorColor: AppColor.neutral50, cursorColor: AppColor.loadingColor(context),
style: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50), style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 14, color: AppColor.textStyleColor(context)),
minLines: 1, minLines: 1,
maxLines: 3, maxLines: 3,
textInputAction: TextInputAction.none, textInputAction: TextInputAction.none,
@ -371,11 +368,11 @@ class _ChatPageState extends State<ChatPage> {
errorBorder: InputBorder.none, errorBorder: InputBorder.none,
contentPadding: const EdgeInsets.only(left: 16, top: 8, bottom: 8), contentPadding: const EdgeInsets.only(left: 16, top: 8, bottom: 8),
alignLabelWithHint: true, alignLabelWithHint: true,
filled: true, // filled: true,
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(), suffixIconConstraints: const BoxConstraints(),
hintText: "Type your message here...", hintText: "Type your message here...",
hintStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xffCCCCCC)), hintStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.lightTextColor(context)),
), ),
).expanded, ).expanded,
IconButton( IconButton(
@ -399,7 +396,7 @@ class _ChatPageState extends State<ChatPage> {
style: const ButtonStyle( style: const ButtonStyle(
tapTargetSize: MaterialTapTargetSize.shrinkWrap, // or .padded tapTargetSize: MaterialTapTargetSize.shrinkWrap, // or .padded
), ),
icon: "chat_attachment".toSvgAsset(width: 24, height: 24), icon: "chat_attachment".toSvgAsset(width: 24, height: 24,color: AppColor.icon2Color(context)),
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
), ),
IconButton( IconButton(
@ -420,7 +417,7 @@ class _ChatPageState extends State<ChatPage> {
style: const ButtonStyle( style: const ButtonStyle(
tapTargetSize: MaterialTapTargetSize.shrinkWrap, // or .padded tapTargetSize: MaterialTapTargetSize.shrinkWrap, // or .padded
), ),
icon: "chat_mic".toSvgAsset(width: 24, height: 24), icon: "chat_mic".toSvgAsset(width: 24, height: 24,color: AppColor.icon2Color(context)),
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
), ),
] else if (chatState == ChatState.voiceRecordingStarted) ...[ ] else if (chatState == ChatState.voiceRecordingStarted) ...[

@ -55,7 +55,7 @@ class _ViewAllAttachmentPageState extends State<ViewAllAttachmentPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColor.neutral100, // backgroundColor: AppColor.neutral100,
appBar: const DefaultAppBar(title: "Documents"), appBar: const DefaultAppBar(title: "Documents"),
body: FutureBuilder<List<ChatAttachment>>( body: FutureBuilder<List<ChatAttachment>>(
future: viewAllDocuments(widget.moduleId, widget.requestId), future: viewAllDocuments(widget.moduleId, widget.requestId),
@ -112,7 +112,7 @@ class AttachmentFileViewer extends StatelessWidget {
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: AppColor.background(context), color: AppColor.background(context),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
side: BorderSide(width: 1, color: (context.isDark ? AppColor.neutral20 : AppColor.neutral30)), side: BorderSide(width: 1, color: AppColor.border2Color(context)),
borderRadius: BorderRadius.circular(32), borderRadius: BorderRadius.circular(32),
), ),
), ),

@ -54,7 +54,7 @@ class IncidentDetailPage extends StatelessWidget {
InfoDateWidget(snapshot.data!.createdDate?.toString() ?? ""), InfoDateWidget(snapshot.data!.createdDate?.toString() ?? ""),
], ],
), ),
12.height, // 12.height,
...requesterDetails(context, snapshot.data!), ...requesterDetails(context, snapshot.data!),
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
...requestDetails(context, snapshot.data!), ...requestDetails(context, snapshot.data!),

@ -66,7 +66,7 @@ class IncidentItemView extends StatelessWidget {
InfoTextWidget(label: context.translation.requestType, value: requestDetails!.requestType), InfoTextWidget(label: context.translation.requestType, value: requestDetails!.requestType),
InfoTextWidget(label: "Incident No", value: requestDetails!.requestNo), InfoTextWidget(label: "Incident No", value: requestDetails!.requestNo),
InfoTextWidget(label: context.translation.assetName, value: requestDetails!.assetName), InfoTextWidget(label: context.translation.assetName, value: requestDetails!.assetName),
InfoTextWidget(label: context.translation.site, value: requestDetails!.site, showArrow: true), InfoTextWidget(label: context.translation.site, value: requestDetails!.site, showEmptyValue: true, showArrow: true),
], ],
).toShadowContainer(context, withShadow: showShadow).onPress(() async { ).toShadowContainer(context, withShadow: showShadow).onPress(() async {
Navigator.push(context, MaterialPageRoute(builder: (context) => IncidentDetailPage(incidentId: requestDetails!.id!))); Navigator.push(context, MaterialPageRoute(builder: (context) => IncidentDetailPage(incidentId: requestDetails!.id!)));

@ -23,6 +23,7 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.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/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/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/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
@ -115,7 +116,7 @@ class _InstallationFormViewState extends State<InstallationFormView> {
formatDateWithTime: true, formatDateWithTime: true,
date: _formData.date, date: _formData.date,
onDatePicker: (DateTime date) async { onDatePicker: (DateTime date) async {
final time = await showTimePicker(context: context, initialTime: TimeOfDay.now()); final time = await showThemedTimePicker(context: context, initialTime: TimeOfDay.now());
if (time == null) return; if (time == null) return;
setState(() { setState(() {
_formData.date = DateTime(date.year, date.month, date.day, time.hour, time.minute); _formData.date = DateTime(date.year, date.month, date.day, time.hour, time.minute);

@ -24,6 +24,7 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.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/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/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/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
@ -60,7 +61,7 @@ class _InstallationPullOutFormViewState extends State<InstallationPullOutFormVie
} }
void _pickInstallationDate(DateTime date) async { void _pickInstallationDate(DateTime date) async {
final time = await showTimePicker( final time = await showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
); );
@ -116,7 +117,7 @@ class _InstallationPullOutFormViewState extends State<InstallationPullOutFormVie
formatDateWithTime: true, formatDateWithTime: true,
date: _formData.date, date: _formData.date,
onDatePicker: (DateTime date) async { onDatePicker: (DateTime date) async {
final time = await showTimePicker(context: context, initialTime: TimeOfDay.now()); final time = await showThemedTimePicker(context: context, initialTime: TimeOfDay.now());
if (time == null) return; if (time == null) return;
setState(() { setState(() {
_formData.date = DateTime(date.year, date.month, date.day, time.hour, time.minute); _formData.date = DateTime(date.year, date.month, date.day, time.hour, time.minute);

@ -25,6 +25,7 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/working_time_tile.dart'; import 'package:test_sa/new_views/common_widgets/working_time_tile.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.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/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart'; import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart';
@ -583,7 +584,7 @@ class EmployeeCard extends StatelessWidget {
formatDateWithTime: true, formatDateWithTime: true,
from: DateTime.tryParse(createdDate ?? ''), from: DateTime.tryParse(createdDate ?? ''),
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -628,7 +629,7 @@ class EmployeeCard extends StatelessWidget {
formatDateWithTime: true, formatDateWithTime: true,
from: DateTime.tryParse(createdDate ?? ''), from: DateTime.tryParse(createdDate ?? ''),
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/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/task_request_provider/task_job_provider.dart'; import 'package:test_sa/providers/task_request_provider/task_job_provider.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart'; import 'package:test_sa/providers/task_request_provider/task_request_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/asset_picker.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
@ -339,7 +340,7 @@ class _CreateTaskViewState extends State<CreateTaskView> with TickerProviderStat
date: DateTime.tryParse(_addTaskModel?.estimationDeliveryDate ?? ""), date: DateTime.tryParse(_addTaskModel?.estimationDeliveryDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -36,6 +36,7 @@ import 'package:test_sa/providers/task_request_provider/task_job_provider.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart'; import 'package:test_sa/providers/task_request_provider/task_request_provider.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.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/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
@ -315,7 +316,7 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
date: DateTime.tryParse(taskModel.installationDate ?? ""), date: DateTime.tryParse(taskModel.installationDate ?? ""),
formatDateWithTime: false, formatDateWithTime: false,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -827,7 +828,7 @@ class EmployeeCard extends StatelessWidget {
formatDateWithTime: true, formatDateWithTime: true,
from: DateTime.tryParse(createdDate ?? ''), from: DateTime.tryParse(createdDate ?? ''),
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -872,7 +873,7 @@ class EmployeeCard extends StatelessWidget {
formatDateWithTime: true, formatDateWithTime: true,
from: DateTime.tryParse(createdDate ?? ''), from: DateTime.tryParse(createdDate ?? ''),
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {

@ -316,7 +316,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
), ),
], ],
), ),
separatorBuilder: (cxt, index) => Divider(thickness: 1, height: 1, color: context.isDark ? AppColor.neutral20 : AppColor.neutral30), separatorBuilder: (cxt, index) => const Divider().defaultStyle(context),
itemCount: userBasedOnSearch.length) itemCount: userBasedOnSearch.length)
], ],
12.height, 12.height,

@ -59,9 +59,9 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
children: [ children: [
requesterInformation(trafProvider.trafRequestDataModel!), requesterInformation(trafProvider.trafRequestDataModel!),
16.height, 12.height,
requestInformation(trafProvider.trafRequestDataModel!), requestInformation(trafProvider.trafRequestDataModel!),
16.height, 12.height,
assetInformation(trafProvider.trafRequestDataModel!), assetInformation(trafProvider.trafRequestDataModel!),
], ],
).expanded, ).expanded,
@ -96,7 +96,7 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
InfoTextWidget(label: 'Number/Contact Information'.addTranslation, value: data.requesterContactNumber ?? '-'), InfoTextWidget(label: 'Number/Contact Information'.addTranslation, value: data.requesterContactNumber ?? '-'),
InfoTextWidget(label: 'Extension'.addTranslation, value: data.requesterExtensionNumber ?? '-'), InfoTextWidget(label: 'Extension'.addTranslation, value: data.requesterExtensionNumber ?? '-'),
], ],
).toShadowContainer(context, borderRadius: 20, padding: 16); ).toShadowContainer(context);
} }
Widget requestInformation(TrafRequestDataModel data) { Widget requestInformation(TrafRequestDataModel data) {
@ -129,7 +129,7 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
InfoTextWidget(label: 'Equipment going to be used with combination of other equipments', value: data.usedWithCombination ?? '-'), InfoTextWidget(label: 'Equipment going to be used with combination of other equipments', value: data.usedWithCombination ?? '-'),
], ],
], ],
).toShadowContainer(context, borderRadius: 20, padding: 16); ).toShadowContainer(context);
} }
Widget assetInformation(TrafRequestDataModel data) { Widget assetInformation(TrafRequestDataModel data) {
@ -167,6 +167,6 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
}) })
], ],
], ],
).toShadowContainer(context, borderRadius: 20, padding: 16); ).toShadowContainer(context);
} }
} }

@ -76,7 +76,7 @@ class TrafRequestItemView extends StatelessWidget {
InfoHeaderWidget(requestDetails?.nameOfType ?? "TRAF Request"), InfoHeaderWidget(requestDetails?.nameOfType ?? "TRAF Request"),
InfoTextWidget(label: context.translation.requestType, value: requestDetails!.requestType), InfoTextWidget(label: context.translation.requestType, value: requestDetails!.requestType),
InfoTextWidget(label: "TRAF No", value: requestDetails!.requestNo), InfoTextWidget(label: "TRAF No", value: requestDetails!.requestNo),
InfoTextWidget(label: context.translation.site, value: requestDetails!.site, showArrow: true), InfoTextWidget(label: context.translation.site, value: requestDetails!.site, showEmptyValue: true,showArrow: true),
], ],
).toShadowContainer(context, withShadow: showShadow).onPress(() async { ).toShadowContainer(context, withShadow: showShadow).onPress(() async {
Navigator.push(context, MaterialPageRoute(builder: (context) => TrafRequestDetailPage(trafId: requestDetails!.id!))); Navigator.push(context, MaterialPageRoute(builder: (context) => TrafRequestDetailPage(trafId: requestDetails!.id!)));

@ -59,11 +59,12 @@ class _UsersAutoCompleteFieldState extends State<SearchUserAutoCompleteField> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10)); final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(16));
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.background(context), color: AppColor.background(context),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), borderRadius: BorderRadius.circular(16),
border: Border.all(color: AppColor.border2Color(context)),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
child: Autocomplete<UsersBasedOnSearchModel>( child: Autocomplete<UsersBasedOnSearchModel>(
@ -92,7 +93,8 @@ class _UsersAutoCompleteFieldState extends State<SearchUserAutoCompleteField> {
return TextField( return TextField(
controller: _controller, controller: _controller,
focusNode: fieldFocusNode, focusNode: fieldFocusNode,
style: AppTextStyles.bodyText.copyWith(color: AppColor.black10), style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 14, color: AppColor.textStyleColor(context)),
cursorColor: AppColor.loadingColor(context),
textAlign: TextAlign.start, textAlign: TextAlign.start,
decoration: InputDecoration( decoration: InputDecoration(
border: border, border: border,
@ -104,11 +106,13 @@ class _UsersAutoCompleteFieldState extends State<SearchUserAutoCompleteField> {
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(maxHeight: 24, maxWidth: 24 + 8), suffixIconConstraints: const BoxConstraints(maxHeight: 24, maxWidth: 24 + 8),
filled: true, filled: true,
fillColor: AppColor.fieldBgColor(context), fillColor: AppColor.dropDownBackground(context),
errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60),
floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), // floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20),
floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.floatingTextStyleColor(context)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.labelTextStyleColor(context)),
labelText: "Users going to use technology", labelText: "Users going to use technology",
labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.textColor(context)), // labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.textColor(context)),
suffixIcon: loading ? CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 3.0).paddingOnly(end: 8) : null, suffixIcon: loading ? CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 3.0).paddingOnly(end: 8) : null,
), ),
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,

@ -200,9 +200,7 @@ class ADatePicker extends StatelessWidget {
), ),
// Icon theme for navigation arrows // Icon theme for navigation arrows
iconTheme: const IconThemeData( iconTheme: IconThemeData(color: Colors.white),
color: Colors.white,
),
), ),
child: child!, child: child!,
); );

@ -172,28 +172,7 @@ class _AppTimerState extends State<AppTimer> {
enable: widget.enabled ? _tempPickerTimer == null : false, enable: widget.enabled ? _tempPickerTimer == null : false,
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
showThemedTimePicker( showThemedTimePicker(context: context, initialTime: TimeOfDay.now()).then((selectedTime) {
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) { if (selectedTime != null) {
_pickerStartAt = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute); _pickerStartAt = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);
if (widget.pickerFromDate != null && _pickerStartAt!.isBefore(widget.pickerFromDate!)) { if (widget.pickerFromDate != null && _pickerStartAt!.isBefore(widget.pickerFromDate!)) {
@ -217,7 +196,7 @@ class _AppTimerState extends State<AppTimer> {
ADatePicker( ADatePicker(
label: context.translation.endTime, label: context.translation.endTime,
hideShadow: true, hideShadow: true,
// backgroundColor: AppColor.dropDownBackground(context), // backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
enable: widget.enabled ? _pickerStartAt != null : false, enable: widget.enabled ? _pickerStartAt != null : false,
from: _pickerStartAt, from: _pickerStartAt,
date: _pickerEndAt, date: _pickerEndAt,
@ -227,24 +206,6 @@ class _AppTimerState extends State<AppTimer> {
showThemedTimePicker( 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) {
selectedDate = selectedDate.add(Duration(hours: selectedTime.hour, minutes: selectedTime.minute)); selectedDate = selectedDate.add(Duration(hours: selectedTime.hour, minutes: selectedTime.minute));
@ -274,8 +235,10 @@ class _AppTimerState extends State<AppTimer> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
CMRequestUtils.formatTimerDurationCM(_tempPickerTimer!.durationInSecond!.round()).bodyText(context).custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), CMRequestUtils.formatTimerDurationCM(_tempPickerTimer!.durationInSecond!.round()).bodyText(context).custom(color: AppColor.labelTextStyleColor(context)),
"Start at: ${_tempPickerTimer!.startAt!.toIso8601String().toFirstActionFormat}\nEnd at: ${_tempPickerTimer!.endAt!.toIso8601String().toFirstActionFormat}".tinyFont(context), "Start at: ${_tempPickerTimer!.startAt!.toIso8601String().toFirstActionFormat}\nEnd at: ${_tempPickerTimer!.endAt!.toIso8601String().toFirstActionFormat}"
.tinyFont(context)
.custom(color: AppColor.lightTextColor(context)),
], ],
).expanded, ).expanded,
8.width, 8.width,
@ -283,7 +246,7 @@ class _AppTimerState extends State<AppTimer> {
deletePickerTime(); deletePickerTime();
}) })
], ],
).toShadowContainer(context, padding: 8) ).toShadowContainer(context)
], ],
8.height, 8.height,
], ],
@ -332,7 +295,11 @@ class _AppTimerState extends State<AppTimer> {
}, },
), ),
), ),
if (widget.enabled) Icon(_running ? Icons.pause : Icons.play_arrow,color: AppColor.icon2Color(context),), if (widget.enabled)
Icon(
_running ? Icons.pause : Icons.play_arrow,
color: AppColor.icon2Color(context),
),
], ],
), ),
).onPress(_loading || !widget.enabled ? null : _onPressed), ).onPress(_loading || !widget.enabled ? null : _onPressed),

Loading…
Cancel
Save