improvements

main_production_RSG
Sikander Saleem 2 months ago
parent b5b58ef622
commit 6be8e94d67

@ -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;

@ -79,16 +79,13 @@ class _ChatMessagesState {
_ChatMessagesState({ _ChatMessagesState({
required this.isLoading, required this.isLoading,
required this.messages, required this.messages,
}) : messageCount = messages.length, }) : messageCount = messages.length,
lastMessageTime = messages.isNotEmpty ? messages.first.createdDate : null; lastMessageTime = messages.isNotEmpty ? messages.first.createdDate : null;
@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
@ -208,7 +205,7 @@ class _ChatPageState extends State<ChatPage> {
loginResponse: provider.chatLoginResponse, loginResponse: provider.chatLoginResponse,
), ),
builder: (context, connectionState, child) { builder: (context, connectionState, child) {
if (connectionState.isLoading) return CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 3).center; if (connectionState.isLoading) return CircularProgressIndicator(color: AppColor.loadingColor(context), strokeWidth: 3).center;
if (connectionState.loginResponse == null) { if (connectionState.loginResponse == null) {
return Column( return Column(
@ -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) {

@ -315,7 +315,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,

@ -219,7 +219,7 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
: !widget.enable : !widget.enable
? (widget.enableColor ?? AppColor.disableDark) ? (widget.enableColor ?? AppColor.disableDark)
: AppColor.dropDownBackground(context)), : AppColor.dropDownBackground(context)),
errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red30), errorStyle: AppTextStyle.tiny.copyWith(color: AppColor.red30),
// floatingLabelStyle: widget.floatingLabelStyle ?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.neutral20), // floatingLabelStyle: widget.floatingLabelStyle ?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.neutral20),

@ -10,6 +10,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.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/item_views/info_text_widget.dart'; import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -62,7 +63,7 @@ class _SwipeHistoryViewState extends State<SwipeHistoryView> {
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -93,7 +94,7 @@ class _SwipeHistoryViewState extends State<SwipeHistoryView> {
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
showTimePicker( showThemedTimePicker(
context: context, context: context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
).then((selectedTime) { ).then((selectedTime) {
@ -121,10 +122,7 @@ class _SwipeHistoryViewState extends State<SwipeHistoryView> {
12.height, 12.height,
AppFilledButton(label: context.translation.search, maxWidth: false, onPressed: getSwipeHistory), AppFilledButton(label: context.translation.search, maxWidth: false, onPressed: getSwipeHistory),
8.height, 8.height,
const Divider( const Divider().defaultStyle(context),
thickness: 2,
color: AppColor.white60,
),
Consumer<UserProvider>(builder: (context, snapshot, child) { Consumer<UserProvider>(builder: (context, snapshot, child) {
return SwipeHistoryList(snapshot.swipeHistory ?? [], snapshot.isLoading).expanded; return SwipeHistoryList(snapshot.swipeHistory ?? [], snapshot.isLoading).expanded;
}), }),

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

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart'; import 'package:test_sa/modules/cm_module/cm_request_utils.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 '../../../new_views/app_style/app_color.dart'; import '../../../new_views/app_style/app_color.dart';
@ -171,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) {
showTimePicker( 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!)) {
@ -216,34 +196,16 @@ class _AppTimerState extends State<AppTimer> {
ADatePicker( ADatePicker(
label: context.translation.endTime, label: context.translation.endTime,
hideShadow: true, hideShadow: true,
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90, // 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,
to: DateTime.now(), to: DateTime.now(),
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) {
selectedDate = selectedDate.add(Duration(hours: selectedTime.hour, minutes: selectedTime.minute)); selectedDate = selectedDate.add(Duration(hours: selectedTime.hour, minutes: selectedTime.minute));
@ -273,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,
@ -282,7 +246,7 @@ class _AppTimerState extends State<AppTimer> {
deletePickerTime(); deletePickerTime();
}) })
], ],
).toShadowContainer(context, padding: 8) ).toShadowContainer(context)
], ],
8.height, 8.height,
], ],
@ -331,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