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

main_production_RSG
WaseemAbbasi22 2 months ago
commit d45c6a1db8

@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22.75 8C22.75 4.27208 19.7279 1.25 16 1.25C12.5025 1.25 9.62621 3.91012 9.28409 7.31753C9.26044 7.55298 9.24862 7.6707 9.31573 7.76318C9.38283 7.85565 9.5121 7.88392 9.77063 7.94046C12.9057 8.62605 15.374 11.0943 16.0596 14.2294C16.1161 14.4879 16.1444 14.6172 16.2368 14.6843C16.3293 14.7514 16.447 14.7396 16.6825 14.7159C20.0899 14.3738 22.75 11.4976 22.75 8Z" fill="#EAF1F4"/>
<path d="M8 9.25C4.27208 9.25 1.25 12.2721 1.25 16C1.25 19.7279 4.27208 22.75 8 22.75C11.7279 22.75 14.75 19.7279 14.75 16C14.75 12.2721 11.7279 9.25 8 9.25Z" fill="#EAF1F4"/>
<path d="M5.77448 4.24219L6.5663 5.19395C6.72824 5.38861 6.97748 5.48841 7.22902 5.45932C7.48056 5.43023 7.70044 5.27618 7.81368 5.0497L8.67082 3.33541C8.78707 3.10292 8.77464 2.82681 8.63799 2.6057C8.50133 2.38459 8.25993 2.25 8 2.25C7.21245 2.25 6.45502 2.38478 5.75052 2.63328C3.12763 3.55843 1.25 6.05696 1.25 9C1.25 9.41421 1.58579 9.75 2 9.75C2.41421 9.75 2.75 9.41421 2.75 9C2.75 6.89355 3.98604 5.07881 5.77448 4.24219Z" fill="#EAF1F4"/>
<path d="M17.4337 18.806L18.2255 19.7578C20.014 18.9212 21.25 17.1064 21.25 15C21.25 14.5858 21.5858 14.25 22 14.25C22.4142 14.25 22.75 14.5858 22.75 15C22.75 17.943 20.8724 20.4416 18.2495 21.3667C17.545 21.6152 16.7875 21.75 16 21.75C15.7401 21.75 15.4987 21.6154 15.362 21.3943C15.2254 21.1732 15.2129 20.8971 15.3292 20.6646L16.1863 18.9503C16.2996 18.7238 16.5194 18.5698 16.771 18.5407C17.0225 18.5116 17.2718 18.6114 17.4337 18.806Z" fill="#EAF1F4"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -303,7 +303,7 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
12.height, 12.height,
AppTextFormField( AppTextFormField(

@ -158,13 +158,12 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
AttachmentPicker( AttachmentPicker(
label: context.translation.attachImage, label: context.translation.attachImage,
attachment: _deviceImages, attachment: _deviceImages,
buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
], ],
).paddingAll(0).toShadowContainer(context), ).paddingAll(0).toShadowContainer(context),
16.height, 12.height,
commentWidget(serviceRequest: _serviceRequest), commentWidget(serviceRequest: _serviceRequest),
], ],
), ),
@ -202,7 +201,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
context.translation.assetStatus.bodyText(context).custom(color: AppColor.black20), context.translation.assetStatus.bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
Wrap( Wrap(
runSpacing: 8, runSpacing: 8,
@ -222,7 +221,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
if (states.contains(WidgetState.selected)) { if (states.contains(WidgetState.selected)) {
return AppColor.primary10; // Thumb color when selected return AppColor.primary10; // Thumb color when selected
} }
return Colors.grey; // Thumb color when unselected (grey) return AppColor.icon2Color(context); // Thumb color when unselected (grey)
}), }),
groupValue: _serviceRequest.defectType, groupValue: _serviceRequest.defectType,
onChanged: (state) { onChanged: (state) {
@ -232,7 +231,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
}), }),
), ),
8.width, 8.width,
Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120)), Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.icon2Color(context))),
], ],
) )
], ],
@ -246,7 +245,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
return AssetPicker( return AssetPicker(
device: _serviceRequest.device, device: _serviceRequest.device,
showLoading: checkPendingRequest, showLoading: checkPendingRequest,
borderColor: AppColor.black20, // borderColor: AppColor.black20,
onPick: (asset) async { onPick: (asset) async {
pendingAssetServiceRequest = null; pendingAssetServiceRequest = null;
_serviceRequest.device = asset; _serviceRequest.device = asset;
@ -262,7 +261,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
context.translation.highPriority.bodyText(context).custom(color: AppColor.black20), context.translation.highPriority.bodyText(context).custom(color: AppColor.textStyleColor(context)),
Consumer<PriorityProvider>(builder: (cxt, snapshot, _) { Consumer<PriorityProvider>(builder: (cxt, snapshot, _) {
if (snapshot.items.isNotEmpty) { if (snapshot.items.isNotEmpty) {
_serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: () => Lookup()); _serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: () => Lookup());

@ -40,7 +40,7 @@ class ServiceRequestBottomSheet {
useSafeArea: true, useSafeArea: true,
isScrollControlled: true, isScrollControlled: true,
isDismissible: isDismissible ?? true, isDismissible: isDismissible ?? true,
backgroundColor: Colors.transparent, backgroundColor: AppColor.bottomSheetColor(context),
builder: (context) => SingleChildScrollView( builder: (context) => SingleChildScrollView(
child: SafeArea(child: childWidget), child: SafeArea(child: childWidget),
).bottomSheetContainer(context), ).bottomSheetContainer(context),

@ -107,7 +107,7 @@ class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMix
label: context.translation.attachFiles, label: context.translation.attachFiles,
attachment: _attachments, attachment: _attachments,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
), ),
], ],

@ -296,7 +296,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
AttachmentPicker( AttachmentPicker(
label: context.translation.attachQuotation, label: context.translation.attachQuotation,
attachment: attachments, attachment: attachments,
buttonIcon: 'quotation_icon'.toSvgAsset(), buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
), ),
], ],

@ -27,13 +27,13 @@ class ChatFilePicker extends StatelessWidget {
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 1, crossAxisSpacing: 12, mainAxisSpacing: 12), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 1, crossAxisSpacing: 12, mainAxisSpacing: 12),
children: <Widget>[ children: <Widget>[
gridItem(Icons.camera_enhance_rounded, context.translation.pickFromCamera).onPress(() async { gridItem(context, Icons.camera_enhance_rounded, context.translation.pickFromCamera).onPress(() async {
await fromMediaPicker(context, ImageSource.camera); await fromMediaPicker(context, ImageSource.camera);
}), }),
gridItem(Icons.image_rounded, context.translation.pickFromGallery).onPress(() async { gridItem(context, Icons.image_rounded, context.translation.pickFromGallery).onPress(() async {
await fromMediaPicker(context, ImageSource.gallery); await fromMediaPicker(context, ImageSource.gallery);
}), }),
gridItem(Icons.file_present_rounded, context.translation.pickFromFiles).onPress(() async { gridItem(context, Icons.file_present_rounded, context.translation.pickFromFiles).onPress(() async {
await fromFilePicker(context); await fromFilePicker(context);
}), }),
], ],
@ -81,23 +81,20 @@ class ChatFilePicker extends StatelessWidget {
} }
} }
Widget gridItem(IconData iconData, String title) { Widget gridItem(BuildContext context, IconData iconData, String title) {
return Container( return Container(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: AppColor.background(context),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(16),
border: Border.all(color: const Color(0xffF1F1F1), width: 1), border: Border.all(color: AppColor.borderColor(context), width: 2),
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Icon(iconData, color: const Color(0xff7D859A), size: 36), Icon(iconData, color: AppColor.icon2Color(context), size: 36),
Text( title.bodyText2(context).custom(color: AppColor.labelTextStyleColor(context), fontSize: context.isTablet() ? 10.toScreenWidth : null),
title,
style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500),
),
], ],
), ),
); );

@ -148,7 +148,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
enabled: demoDocumentLookup != null, enabled: demoDocumentLookup != null,
documentType: demoDocumentLookup, documentType: demoDocumentLookup,
showAsListView: true, showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: (context.isDark ? AppColor.primary10 : AppColor.neutral120).withOpacity(demoDocumentLookup != null ? 1 : .4)), buttonIcon: 'image-plus'.toSvgAsset(color: (AppColor.primary10).withOpacity(demoDocumentLookup != null ? 1 : .4)),
onChange: (attachments) { onChange: (attachments) {
_attachments = attachments; _attachments = attachments;
setState(() {}); setState(() {});

@ -227,7 +227,7 @@ class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with Tick
documentType: demoDocumentLookup, documentType: demoDocumentLookup,
enabled: demoDocumentLookup != null, enabled: demoDocumentLookup != null,
showAsListView: true, showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: (context.isDark ? AppColor.primary10 : AppColor.neutral120).withOpacity(demoDocumentLookup != null ? 1 : .4)), buttonIcon: 'image-plus'.toSvgAsset(color: (AppColor.primary10).withOpacity(demoDocumentLookup != null ? 1 : .4)),
), ),
], ],
).toShadowContainer(context, borderRadius: 20), ).toShadowContainer(context, borderRadius: 20),

@ -156,7 +156,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
showAsListView: true, showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
onChange: (_attachments) { onChange: (_attachments) {
attachments = _attachments; attachments = _attachments;
setState(() {}); setState(() {});

@ -223,9 +223,7 @@ class _UpdateEquipmentInternalAuditPageState extends State<UpdateEquipmentIntern
attachment: _attachments, attachment: _attachments,
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
onlyImages: false, onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset( buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
color: AppColor.primary10,
),
), ),
8.height, 8.height,
], ],

@ -119,7 +119,7 @@ class _UpdateSystemInternalAuditPageState extends State<UpdateSystemInternalAudi
// // }); // // });
bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false; bool isTimerPickerEnable = ApiManager.instance.assetGroup?.enabledEngineerTimer ?? false;
InternalAuditProvider provider = Provider.of<InternalAuditProvider>(context, listen: false); InternalAuditProvider provider = Provider.of<InternalAuditProvider>(context, listen: false);
if ( formModel.startTime == null) { if (formModel.startTime == null) {
Fluttertoast.showToast(msg: "Working Hours Required"); Fluttertoast.showToast(msg: "Working Hours Required");
return; return;
} }
@ -162,9 +162,7 @@ class _UpdateSystemInternalAuditPageState extends State<UpdateSystemInternalAudi
formModel.startTime = start; formModel.startTime = start;
formModel.endTime = end; formModel.endTime = end;
formModel.totalHours = totalHours; formModel.totalHours = totalHours;
setState(() { setState(() {});
});
} }
} }
@ -216,9 +214,7 @@ class _UpdateSystemInternalAuditPageState extends State<UpdateSystemInternalAudi
attachment: _attachments, attachment: _attachments,
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
onlyImages: false, onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset( buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
color: AppColor.primary10,
),
), ),
8.height, 8.height,
], ],

@ -148,7 +148,7 @@ class _CreateLoanRequestPageState extends State<CreateLoanRequestPage> with Tick
attachment: attachments, attachment: attachments,
onlyImages: false, onlyImages: false,
showAsListView: true, showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
onChange: (attachments) { onChange: (attachments) {
attachments = attachments; attachments = attachments;
setState(() {}); setState(() {});

@ -206,9 +206,7 @@ class _UpdateDeliveryNotesState extends State<UpdateDeliveryNotes> {
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
// showAsListView: true, // showAsListView: true,
onlyImages: false, onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset( buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
color: AppColor.primary10,
),
), ),
16.height, 16.height,
//should create a reusable widget. //should create a reusable widget.

@ -203,9 +203,7 @@ class _UpdateMedicalGasInspectionPageState extends State<UpdateMedicalGasInspect
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
showAsListView: true, showAsListView: true,
onlyImages: false, onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset( buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
color: AppColor.primary10,
),
), ),
16.height, 16.height,
Row( Row(

@ -329,7 +329,7 @@ class _WoInfoFormState extends State<WoInfoForm> {
attachment: ppmProvider.ppmPlanAttachments, attachment: ppmProvider.ppmPlanAttachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
], ],
).toShadowContainer(context), ).toShadowContainer(context),

@ -126,8 +126,8 @@ class _CreateDeviceTransferRequestState extends State<CreateDeviceTransferReques
AssetPicker( AssetPicker(
device: _pickedAsset, device: _pickedAsset,
showLoading: false, showLoading: false,
borderColor: AppColor.black20, // borderColor: AppColor.black20,
backgroundColor: AppColor.white936, // backgroundColor: AppColor.white936,
onPick: (asset) async { onPick: (asset) async {
_pickedAsset = asset; _pickedAsset = asset;
@ -247,7 +247,7 @@ class _CreateDeviceTransferRequestState extends State<CreateDeviceTransferReques
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
// 100.height, // 100.height,
], ],

@ -88,7 +88,7 @@ class _DeviceFilterScreenState extends State<DeviceFilterScreen> {
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
child: Text( child: Text(
'Clear Filters', 'Clear Filters',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
), ),
).paddingOnly(start: 16, end: 16) ).paddingOnly(start: 16, end: 16)
], ],

@ -80,7 +80,7 @@ class _DeviceSearchScreenState extends State<DeviceSearchScreen> {
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
child: Text( child: Text(
'Clear Filters', 'Clear Filters',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
), ),
).paddingOnly(start: 16, end: 16), ).paddingOnly(start: 16, end: 16),
], ],

@ -8,6 +8,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.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/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/views/widgets/equipment/asset_item_listview.dart'; import 'package:test_sa/views/widgets/equipment/asset_item_listview.dart';
import 'package:test_sa/views/widgets/horizontal_list_widget.dart'; import 'package:test_sa/views/widgets/horizontal_list_widget.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
@ -67,27 +68,7 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
appBar: CustomAppBar( appBar: DefaultAppBar(title: context.translation.searchAsset),
title: context.translation.searchAsset,
/// comment reset button because it isn't exist in new design
// actions: [
// if (_showResetButton())
// Row(
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// Text(
// context.translation.reset,
// style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
// ).paddingAll(8).onPress(() {
// setState(() {
// _searchController.text = "";
// });
// }),
// ],
// )
// ],
),
body: Column( body: Column(
children: [ children: [
HorizontalListWidget( HorizontalListWidget(
@ -117,10 +98,10 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
_setValue(value); _setValue(value);
}, },
suffixIcon: IconButton( suffixIcon: IconButton(
icon: const Icon(Icons.search), icon: Icon(Icons.search, color: AppColor.icon2Color(context)),
splashColor: Colors.transparent, splashColor: Colors.transparent,
onPressed: _searchController.text.isNotEmpty ? _search : null, onPressed: _searchController.text.isNotEmpty ? _search : null,
color: AppColor.neutral20, color: AppColor.icon2Color(context),
).paddingOnly(end: 0), ).paddingOnly(end: 0),
).paddingOnly(top: 16, start: 16, end: 16, bottom: 8), ).paddingOnly(top: 16, start: 16, end: 16, bottom: 8),
), ),
@ -165,7 +146,7 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
Navigator.of(context).pop(device); Navigator.of(context).pop(device);
} }
}, },
selectButton: Text(title, style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context))), selectButton: Text(title, style: AppTextStyles.bodyText.copyWith(color: AppColor.primary10)),
); );
}, },
).expanded, ).expanded,
@ -201,8 +182,7 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
), ),
), ),
], ],
) )),
),
// Row( // Row(
// mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
// children: [ // children: [

@ -295,7 +295,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
8.height, 8.height,
], ],

@ -219,7 +219,7 @@ class _GasRefillRequestFormState extends State<GasRefillRequestForm> {
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
], ],
).toShadowContainer(context, padding: 10).paddingOnly(start: 16, end: 16, top: 16), ).toShadowContainer(context, padding: 10).paddingOnly(start: 16, end: 16, top: 16),

@ -294,7 +294,7 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
attachment: _attachments, attachment: _attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
8.height, 8.height,
], ],

@ -111,13 +111,13 @@ class _CreateTaskViewState extends State<CreateTaskView> with TickerProviderStat
_addTaskModel?.callComment = value; _addTaskModel?.callComment = value;
}, },
), ),
23.height, 24.height,
AttachmentPicker( AttachmentPicker(
label: context.translation.attachImage, label: context.translation.attachImage,
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
//verify this if not required delete this .. //verify this if not required delete this ..
onChange: (attachments) { onChange: (attachments) {
attachments = attachments; attachments = attachments;

@ -193,7 +193,7 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
), ),
], ],
).toShadowContainer(context), ).toShadowContainer(context),

@ -213,7 +213,7 @@ class _UpdateTrafRequestPageState extends State<UpdateTrafRequestPage> {
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
onChange: (attachment) { onChange: (attachment) {
attachments = attachment; attachments = attachment;
}, },

@ -28,7 +28,7 @@ class AppDashedButton extends StatelessWidget {
child: DottedBorder( child: DottedBorder(
strokeWidth: 1, strokeWidth: 1,
padding: padding ?? EdgeInsets.symmetric(vertical: 16.toScreenHeight, horizontal: 16.toScreenWidth), padding: padding ?? EdgeInsets.symmetric(vertical: 16.toScreenHeight, horizontal: 16.toScreenWidth),
color: context.isDark ? AppColor.primary40 : buttonColor ?? AppColor.black20, color: AppColor.primary10,
dashPattern: const [4, 3], dashPattern: const [4, 3],
radius: const Radius.circular(10), radius: const Radius.circular(10),
borderType: BorderType.RRect, borderType: BorderType.RRect,
@ -38,10 +38,10 @@ class AppDashedButton extends StatelessWidget {
children: [ children: [
icon!, icon!,
7.width, 7.width,
title.heading6(context).custom(color: context.isDark ? AppColor.primary40 : buttonColor ?? AppColor.black10).center, title.heading6(context).custom(color: AppColor.primary10).center,
], ],
) )
: title.heading6(context).custom(color: context.isDark ? AppColor.primary40 : buttonColor ?? AppColor.primary10).center, : title.heading6(context).custom(color: AppColor.primary10).center,
), ),
).onPress(onPressed); ).onPress(onPressed);
} }

@ -47,7 +47,7 @@ class AppFilledButton extends StatelessWidget {
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
color: disableButton ?context.isDark ?AppColor.neutral20 :AppColor.neutral140 : (buttonColor ?? AppColor.primary10), color: disableButton ? context.isDark ?AppColor.neutral20 :AppColor.neutral140 : (buttonColor ?? AppColor.primary10),
border: showBorder ? Border.all(color: textColor ?? AppColor.background(context)) : null, border: showBorder ? Border.all(color: textColor ?? AppColor.background(context)) : null,
), ),
child: loading child: loading

@ -46,6 +46,7 @@ class AppTextFormField extends StatefulWidget {
final bool showSpeechToText; final bool showSpeechToText;
final Color? enableColor; final Color? enableColor;
final bool makeMultiLinesNull; final bool makeMultiLinesNull;
final bool isBackgroundTransparent;
const AppTextFormField({ const AppTextFormField({
Key? key, Key? key,
@ -81,6 +82,7 @@ class AppTextFormField extends StatefulWidget {
this.alignLabelWithHint = false, // Provide default value this.alignLabelWithHint = false, // Provide default value
this.makeMultiLinesNull = false, this.makeMultiLinesNull = false,
this.onTap, this.onTap,
this.isBackgroundTransparent = false,
this.enableColor, this.enableColor,
}) : super(key: key); }) : super(key: key);
@ -209,8 +211,10 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
contentPadding: widget.contentPadding ?? EdgeInsets.symmetric(vertical: 12.toScreenHeight, horizontal: 16.toScreenWidth), contentPadding: widget.contentPadding ?? EdgeInsets.symmetric(vertical: 12.toScreenHeight, horizontal: 16.toScreenWidth),
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(minWidth: 0), suffixIconConstraints: const BoxConstraints(minWidth: 0),
filled: true, filled: !widget.isBackgroundTransparent,
fillColor: (context.isDark && !widget.enable fillColor: widget.isBackgroundTransparent
? null
: (context.isDark && !widget.enable
? AppColor.neutral50 ? AppColor.neutral50
: !widget.enable : !widget.enable
? (widget.enableColor ?? AppColor.disableDark) ? (widget.enableColor ?? AppColor.disableDark)

@ -142,7 +142,7 @@ class CreateRequestModel {
// }); // });
if (context.settingProvider.isUserFlowMedical) { if (context.settingProvider.isUserFlowMedical) {
list.add(CreateRequestModel('Loan Equipment Request'.addTranslation, "add_icon", CreateLoanRequestPage.id)); list.add(CreateRequestModel('Loan Equipment Request'.addTranslation, "wo/loan_wo", CreateLoanRequestPage.id));
// list.add(CreateRequestModel('Demo Request'.addTranslation, "add_icon", CreateDemoRequestPage.id)); // list.add(CreateRequestModel('Demo Request'.addTranslation, "add_icon", CreateDemoRequestPage.id));
} }
} }

@ -154,7 +154,7 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
child: Text( child: Text(
'Clear Filters', 'Clear Filters',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10), style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
), ),
).paddingOnly(start: 16, end: 16) ).paddingOnly(start: 16, end: 16)
], ],

@ -300,7 +300,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
child: Text( child: Text(
'Clear Filters', 'Clear Filters',
style: AppTextStyles.tinyFont.copyWith(color: AppColor.primary10, fontWeight: FontWeight.w500), style: AppTextStyles.tinyFont.copyWith(color: AppColor.red30),
), ),
), ),
], ],

@ -108,9 +108,10 @@ class _SettingsPageState extends State<SettingsPage> {
context.translation.arabic.heading5(context).custom(color: AppColor.textStyleColor(context)), context.translation.arabic.heading5(context).custom(color: AppColor.textStyleColor(context)),
AdvancedSwitch( AdvancedSwitch(
controller: langController, controller: langController,
initialValue: langController!.value,
activeColor: AppColor.green50.withOpacity(0.5), activeColor: AppColor.green50.withOpacity(0.5),
inactiveColor: AppColor.neutral10, inactiveColor: AppColor.neutral10,
thumb: CircleAvatar(backgroundColor: _settingProvider!.language == "ar" ? AppColor.green50 : AppColor.neutral20), thumb: CircleAvatar(backgroundColor: langController!.value ? AppColor.green50 : AppColor.neutral20),
borderRadius: const BorderRadius.all(Radius.circular(30)), borderRadius: const BorderRadius.all(Radius.circular(30)),
width: 42.toScreenWidth, width: 42.toScreenWidth,
height: 24.toScreenHeight, height: 24.toScreenHeight,
@ -130,9 +131,10 @@ class _SettingsPageState extends State<SettingsPage> {
context.translation.lightTheme.heading5(context).custom(color: AppColor.textStyleColor(context)), context.translation.lightTheme.heading5(context).custom(color: AppColor.textStyleColor(context)),
AdvancedSwitch( AdvancedSwitch(
controller: themeController, controller: themeController,
initialValue: themeController!.value,
activeColor: AppColor.green50.withOpacity(0.5), activeColor: AppColor.green50.withOpacity(0.5),
inactiveColor: AppColor.neutral10, inactiveColor: AppColor.neutral10,
thumb: CircleAvatar(backgroundColor: _settingProvider!.theme == "light" ? AppColor.green50 : AppColor.neutral20), thumb: CircleAvatar(backgroundColor: themeController!.value ? AppColor.green50 : AppColor.neutral20),
borderRadius: const BorderRadius.all(Radius.circular(30)), borderRadius: const BorderRadius.all(Radius.circular(30)),
width: 42.toScreenWidth, width: 42.toScreenWidth,
height: 24.toScreenHeight, height: 24.toScreenHeight,

@ -16,7 +16,7 @@ class SingleBtnDialog extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Dialog( return Dialog(
backgroundColor: Colors.white, backgroundColor: AppColor.background(context),
shape: const RoundedRectangleBorder(), shape: const RoundedRectangleBorder(),
insetPadding: const EdgeInsets.only(left: 21, right: 21), insetPadding: const EdgeInsets.only(left: 21, right: 21),
child: Padding( child: Padding(
@ -27,9 +27,9 @@ class SingleBtnDialog extends StatelessWidget {
children: [ children: [
Text( Text(
title ?? "Confirm", title ?? "Confirm",
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: Colors.black87, height: 35 / 24, letterSpacing: -0.96), style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: AppColor.headingTextColor(context), height: 35 / 24, letterSpacing: -0.96),
).paddingOnly(top: 16), ).paddingOnly(top: 16),
message != null ? message!.heading5(context).custom(color: AppColor.neutral70) : const SizedBox(), message != null ? message!.heading5(context).custom(color: AppColor.headingTextColor(context)) : const SizedBox(),
28.height, 28.height,
AppFilledButton( AppFilledButton(
label: okTitle ?? "OK", label: okTitle ?? "OK",

@ -1,407 +0,0 @@
// import 'dart:convert';
// import 'dart:io';
//
// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
// import 'package:test_sa/controllers/providers/api/user_provider.dart';
// import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
// import 'package:test_sa/extensions/context_extension.dart';
// import 'package:test_sa/extensions/int_extensions.dart';
// import 'package:test_sa/extensions/widget_extensions.dart';
// import 'package:test_sa/models/generic_attachment_model.dart';
// import 'package:test_sa/models/service_request/pending_service_request_model.dart';
// import 'package:test_sa/models/service_request/service_request.dart';
// import 'package:test_sa/modules/cm_module/utilities/cm_request_utils.dart';
// import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
// import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
// import 'package:test_sa/providers/service_request_providers/requested_through_provider.dart';
// import 'package:test_sa/views/pages/user/requests/pending_requests_screen.dart';
// import 'package:test_sa/views/widgets/bottom_sheets/pending_request_bottom_sheet.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/loaders/loading_manager.dart';
// import 'package:test_sa/views/widgets/sound/TextSpeechRecordWidget.dart';
//
// import '../../../../new_views/app_style/app_color.dart';
// import '../../../../new_views/common_widgets/default_app_bar.dart';
// import '../../../../providers/service_request_providers/priority_provider.dart';
// import '../../../../providers/service_request_providers/type_of_request_provider.dart';
//
// class CreateServiceRequestPage extends StatefulWidget {
// static const String id = "/create-request";
// final ServiceRequest? serviceRequest;
//
// const CreateServiceRequestPage({this.serviceRequest, Key? key}) : super(key: key);
//
// @override
// CreateServiceRequestPageState createState() => CreateServiceRequestPageState();
// }
//
// class CreateServiceRequestPageState extends State<CreateServiceRequestPage> {
// late TextEditingController _commentController;
//
// late double _height;
// late UserProvider _userProvider;
// late SettingProvider _settingProvider;
// late ServiceRequestsProvider _serviceRequestsProvider;
// late ServiceRequest _serviceRequest;
// final List<GenericAttachmentModel> attachments = [];
// final bool _isLoading = false;
// bool _showDatePicker = false;
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
// final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
// DateTime? _dateTime;
//
// bool isFirstActionSubmitted = false;
//
// @override
// void initState() {
// _commentController = TextEditingController();
// if (widget.serviceRequest != null) {
// _serviceRequest = widget.serviceRequest!;
// attachments.addAll(_serviceRequest.devicePhotos!.map((e) => GenericAttachmentModel(name: e)).toList());
// _showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction?.name == "Need a visit";
// if (_showDatePicker && _serviceRequest.visitDate != null) {
// _dateTime = DateTime.tryParse(_serviceRequest.visitDate!);
// }
// } else {
// _serviceRequest = ServiceRequest();
// }
// isFirstActionSubmitted = _serviceRequest.firstAction != null;
// super.initState();
// }
//
// //
// // getServiceRequestById(String id) async {
// // try {
// // ServiceRequest request = await _serviceRequestsProvider.getServiceRequestObjectById(requestId: id) ?? "";
// // _serviceRequest = request;
// // _device = _serviceRequest.device;
// // attachments.addAll(_serviceRequest.devicePhotos.map((e) {
// // return File(e);
// // }).toList());
// // _showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction.name == "Need a visit";
// // if (_showDatePicker && _serviceRequest.visitDate != null) {
// // _dateTime = DateTime.tryParse(_serviceRequest.visitDate);
// // }
// // _isLoading = false;
// // } catch (ex) {
// // _isLoading = false;
// // }
// // setState(() {});
// // }
//
// @override
// void dispose() {
// _commentController.dispose();
// super.dispose();
// }
//
// bool _isLocalUrl(String url) {
// if (url.isEmpty != false) return false;
// return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
// }
//
// // bool priority;
//
// void getData() {
// Provider.of<RequestedThroughProvider>(context).getDate();
// Provider.of<TypeOfRequestProvider>(context).getDate();
// Provider.of<PriorityProvider>(context).getDate();
// Provider.of<EquipmentStatusProvider>(context).getDate();
// }
//
// PendingAssetServiceRequest? pendingAssetServiceRequest;
//
// @override
// Widget build(BuildContext context) {
// _height = MediaQuery.of(context).size.height;
// _userProvider = Provider.of<UserProvider>(context);
//
// _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
//
// return Scaffold(
// key: _scaffoldKey,
// appBar: DefaultAppBar(title: context.translation.newServiceRequest),
// body: SafeArea(
// child: LoadingManager(
// isLoading: _isLoading,
// isFailedLoading: false,
// stateCode: 200,
// onRefresh: () async {},
// child: Form(
// key: _formKey,
// child: Column(
// children: [
// SingleChildScrollView(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// AssetPicker(
// device: _serviceRequest.device,
// showLoading: checkPendingRequest,
// onPick: (asset) async {
// pendingAssetServiceRequest = null;
// _serviceRequest.device = asset;
// await checkAssetForPendingServiceRequest(asset.id!.toInt());
//
// if (pendingAssetServiceRequest != null && pendingAssetServiceRequest!.details!.isNotEmpty) {
// showPendingRequestBottomSheet();
// }
// },
// ),
// if (pendingAssetServiceRequest != null && pendingAssetServiceRequest!.details!.isNotEmpty) ...[
// 8.height,
// Row(
// children: [
// const Icon(Icons.warning, color: Color(0xffEE404C), size: 14),
// 8.width,
// Text(
// "This asset already have ${pendingAssetServiceRequest!.details!.length} request pending",
// style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500, color: Color(0xff7D859A), decoration: TextDecoration.underline),
// ).expanded,
// ],
// ).onPress(() {
// showPendingRequests();
// }),
// ],
// 16.height,
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Text(context.translation.priority, style: Theme.of(context).textTheme.bodyLarge),
// Consumer<PriorityProvider>(builder: (cxt, snapshot, _) {
// _serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: null);
//
// return Transform.scale(
// scale: 0.8,
// child: CupertinoSwitch(
// thumbColor: _serviceRequest.priority?.value != 0 ? const Color(0xffF63939) : Colors.blueGrey.withOpacity(.5),
// activeColor: AppColor.blueStatus(context).withOpacity(.25),
// value: _serviceRequest.priority?.value != 0,
// onChanged: (state) {
// if (state) {
// _serviceRequest.priority = snapshot.items.firstWhere((element) => element.value == 1, orElse: null);
// } else {
// _serviceRequest.priority = snapshot.items.firstWhere((element) => element.value == 0, orElse: null);
// }
// setState(() {});
// }).toShimmer(isShow: snapshot.loading,context: context),
// );
// }),
// ],
// ),
// 16.height,
// Consumer<EquipmentStatusProvider>(builder: (cxt, snapshot, _) {
// try {
// _serviceRequest.defectType ??= snapshot.items.first;
// } catch (ex) {
// print("snapshot.items:${snapshot.items.length}");
// }
//
// return Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(context.translation.equipmentStatus, style: Theme.of(context).textTheme.bodyLarge),
// 8.height,
// Wrap(
// runSpacing: 8,
// spacing: 8,
// children: [
// for (var element in snapshot.items)
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// SizedBox(
// width: 24,
// height: 24,
// child: Radio(
// value: element,
// activeColor: Colors.red,
// fillColor: WidgetStateColor.resolveWith((states) {
// if (states.contains(WidgetState.selected)) return const Color(0xff3DA5E5);
// return const Color(0xffE0E0E0);
// }),
// groupValue: _serviceRequest.defectType,
// onChanged: (state) {
// setState(() {
// _serviceRequest.defectType = element;
// });
// }),
// ),
// 8.width,
// Text(element.name!, style: Theme.of(context).textTheme.bodySmall),
// ],
// )
// ],
// ).toShimmer(isShow: snapshot.loading,context: context),
// ],
// );
// }),
// 16.height,
// AttachmentPicker(label: context.translation.attachImage, attachment: attachments, showAsGrid: true),
// ],
// ).toShadowContainer(context),
//
// // SingleItemDropDownMenu<Lookup, PriorityProvider>(
// // context: context,
// // title: context.translation.priority,
// // initialValue: _serviceRequest?.priority,
// // onSelect: (value) {
// // _serviceRequest.priority = value;
// // },
// // ),
// // 8.height,
// // SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
// // context: context,
// // title: context.translation.equipmentStatus,
// // initialValue: _serviceRequest?.defectType,
// // onSelect: (value) {
// // _serviceRequest.defectType = value;
// // },
// // ),
//
// // Consumer<RequestedThroughProvider>(builder: (context, snapshot, _) {
// // return SingleItemDropDownMenu<Lookup, RequestedThroughProvider>(
// // context: context,
// // enabled: false,
// // title: context.translation.source,
// // initialValue: snapshot.items?.firstWhere((element) => element.value == 3, orElse: null),
// // );
// // }),
// // 8.height,
// // Consumer<TypeOfRequestProvider>(builder: (context, snapshot, _) {
// // return SingleItemDropDownMenu<Lookup, TypeOfRequestProvider>(
// // context: context,
// // title: context.translation.requestType,
// // enabled: false,
// // initialValue: snapshot.items?.firstWhere((element) => element.value == 1, orElse: null),
// // // onSelect: (value) {
// // // _serviceRequest.type = value;
// // // },
// // );
// // }),
//
// // Align(
// // alignment: AlignmentDirectional.centerStart,
// // child: context.translation.callComments.heading5(context).custom(color: AppColor.textStyleColor(context)),
// // ),
// 8.height,
// // SpeechToTextButton(
// // controller: _commentController,
// // ),
// // 8.height,
// // AppTextFormField(
// // controller: _commentController,
// // labelText: context.translation.problemDesc,
// // suffixIcon: "warning".toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, width: 24).paddingOnly(end: 16),
// // initialValue: _serviceRequest.callComments,
// // onSaved: (text) {
// // _serviceRequest.callComments = text;
// // },
// // ),
// // 8.height,
// // RecordSound(
// // onRecord: (audio) {
// // _serviceRequest.audio = audio;
// // },
// // enabled: widget.serviceRequest == null ? true : false,
// // ),
// 8.height,
// TextSpeechRecordWidget(
// initialMessage: _serviceRequest.callComments!,
// onMessageChange: (message) {
// _serviceRequest.callComments = message;
// },
// onRecord: (audio) {
// _serviceRequest.audio = audio;
// },
// enabled: widget.serviceRequest == null ? true : false,
// ),
// 16.height,
// ],
// ),
// ).expanded,
// AppFilledButton(
// onPressed: checkPendingRequest ? null : _submit,
// loading: checkPendingRequest,
// label: (pendingAssetServiceRequest != null && (pendingAssetServiceRequest!.details?.isNotEmpty ?? false)) ? "Submit Duplicate Request" : "Submit New Request",
// ),
// ],
// ),
// ).paddingOnly(start: 16, end: 16, bottom: 24, top: 16),
// ),
// ),
// );
// }
//
// bool checkPendingRequest = false;
//
// void showPendingRequests() {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => PendingServiceRequestScreen(pendingAssetServiceRequest!)));
// }
//
// void showPendingRequestBottomSheet() async {
// bool view = (await showModalBottomSheet(
// context: context,
// isDismissible: false,
// shape: const RoundedRectangleBorder(
// borderRadius: BorderRadius.vertical(
// top: Radius.circular(20),
// ),
// ),
// clipBehavior: Clip.antiAliasWithSaveLayer,
// builder: (BuildContext context) => PendingRequestBottomSheet(pendingAssetServiceRequest!, _serviceRequest.device!),
// )) as bool;
// if (view) {
// showPendingRequests();
// }
// }
//
// Future<void> checkAssetForPendingServiceRequest(int assetId) async {
// checkPendingRequest = true;
// setState(() {});
//
// pendingAssetServiceRequest = await _serviceRequestsProvider.checkAssetPendingRequest(assetId);
// await Future.delayed(const Duration(milliseconds: 250));
//
// checkPendingRequest = false;
// setState(() {});
// }
//
// Future<void> _submit() async {
// _serviceRequest.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null);
// _serviceRequest.type = Provider.of<TypeOfRequestProvider>(context, listen: false).items.firstWhere((element) => element.value == 1, orElse: null);
//
// if (_formKey.currentState!.validate() && await _serviceRequest.validateNewRequest(context)) {
// _formKey.currentState!.save();
//
// // bool canSubmitRequest = await checkAssetForPendingServiceRequest(_serviceRequest.device.id);
// // if (!canSubmitRequest) {
// // return;
// // }
//
//
// _serviceRequest.devicePhotos = attachments.map((item) => ServiceRequestUtils.isLocalUrl(item.name??'') ? "${item.name?.split("/").last}|${base64Encode(File(item.name??'').readAsBytesSync())}" : item.name??'').toList();
// if (_serviceRequest.audio != null) {
// if (_isLocalUrl(_serviceRequest.audio!)) {
// final File file = File(_serviceRequest.audio!);
// _serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}";
// }
// }
// await _serviceRequestsProvider.createRequest(
// context: context,
// user: _userProvider.user!,
// host: _settingProvider.host!,
// serviceRequest: _serviceRequest,
// );
// }
// }
// }

@ -6,6 +6,8 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
class AssetDetailBottomSheet extends StatelessWidget { class AssetDetailBottomSheet extends StatelessWidget {
Asset? asset; Asset? asset;
@ -16,14 +18,14 @@ class AssetDetailBottomSheet extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom + bottom: MediaQuery.of(context).viewInsets.bottom + MediaQuery.of(context).padding.bottom,
MediaQuery.of(context).padding.bottom,
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
(asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context).custom(color: AppColor.textStyleColor(context)), // (asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context).custom(color: AppColor.textStyleColor(context)),
InfoHeader16Widget(asset?.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"),
16.height, 16.height,
AspectRatio( AspectRatio(
aspectRatio: 358 / 136, aspectRatio: 358 / 136,
@ -52,33 +54,70 @@ class AssetDetailBottomSheet extends StatelessWidget {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"${context.translation.assetNo}: ${asset!.assetNumber}".bodyText(context), InfoTextWidget(
"${context.translation.modelName}: ${asset!.modelDefinition?.modelName}".bodyText(context), label: context.translation.assetNo,
"${context.translation.supplier}: ${asset!.supplier?.suppliername?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), value: asset!.assetNumber,
"${context.translation.manufacture}: ${asset!.modelDefinition?.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context), showEmptyValue: true,
//"${context.translation.location}: ${assetModel.site.custName?.cleanupWhitespace?.capitalizeFirstOfEach}".bodyText(context), ),
InfoTextWidget(
label: context.translation.modelName,
value: asset!.modelDefinition?.modelName,
showEmptyValue: true,
),
InfoTextWidget(
label: context.translation.supplier,
value: asset!.supplier?.suppliername?.cleanupWhitespace.capitalizeFirstOfEach,
showEmptyValue: true,
),
InfoTextWidget(
label: context.translation.manufacture,
value: asset!.modelDefinition?.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach,
showEmptyValue: true,
),
], ],
).expanded, ).expanded,
8.width, 8.width,
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"${context.translation.snNo}: ${asset!.assetSerialNo}".bodyText(context), InfoTextWidget(
"${context.translation.site}: ${asset?.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), label: context.translation.snNo,
"${context.translation.building}: ${asset?.building?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), value: asset!.assetSerialNo,
"${context.translation.floor}: ${asset?.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), showEmptyValue: true,
"${context.translation.md}: ${asset?.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), ),
"${context.translation.room}: ${asset?.room?.name ?? "-"}".bodyText(context), InfoTextWidget(
label: context.translation.site,
value: asset?.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach,
showEmptyValue: true,
),
InfoTextWidget(
label: context.translation.building,
value: asset?.building?.name?.cleanupWhitespace.capitalizeFirstOfEach,
showEmptyValue: true,
),
InfoTextWidget(
label: context.translation.floor,
value: asset?.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach,
showEmptyValue: true,
),
InfoTextWidget(
label: context.translation.md,
value: asset?.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach,
showEmptyValue: true,
),
InfoTextWidget(
label: context.translation.room,
value: asset?.room?.name,
showEmptyValue: true,
),
], ],
).expanded, ).expanded,
], ],
), ),
8.height, 8.height,
if ((asset?.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[ if ((asset?.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[
8.height, const Divider().defaultStyle(context),
const Divider(color: AppColor.neutral30, height: 1, thickness: 1), InfoTextWidget(label: asset!.modelDefinition!.assetDescription!, isMsg: true, showEmptyValue: true),
8.height,
asset!.modelDefinition!.assetDescription!.bodyText(context),
] ]
], ],
) )

@ -9,6 +9,8 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_by_id_model.dart'; import 'package:test_sa/models/device/asset_by_id_model.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/item_views/info_header_widget.dart';
import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
@ -76,7 +78,7 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: AppColor.neutral30, color: AppColor.neutral30,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(16),
), ),
image: DecorationImage( image: DecorationImage(
fit: BoxFit.cover, fit: BoxFit.cover,
@ -96,7 +98,7 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
backgroundColor: AppColor.getRequestStatusColorByName(context, assetModel.commissioningStatus!.name!), backgroundColor: AppColor.getRequestStatusColorByName(context, assetModel.commissioningStatus!.name!),
), ),
if (assetModel.commissioningStatus != null) 8.height, if (assetModel.commissioningStatus != null) 8.height,
(assetModel.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-").heading5(context).custom(color: AppColor.textStyleColor(context)), InfoHeader16Widget(assetModel.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"),
8.height, 8.height,
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -104,11 +106,10 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"${context.translation.assetNo}: ${assetModel.multiAssets!.first.assetNumber}".bodyText(context), InfoTextWidget(label: context.translation.assetNo, value: assetModel.multiAssets!.first.assetNumber, showEmptyValue: true),
"${context.translation.modelName}: ${assetModel.modelDefinition!.modelName}".bodyText(context), InfoTextWidget(label: context.translation.modelName, value: assetModel.modelDefinition!.modelName, showEmptyValue: true),
"${context.translation.supplier}: ${assetModel.supplier?.suppliername ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.supplier, value: assetModel.supplier?.suppliername, showEmptyValue: true),
"${context.translation.manufacture}: ${assetModel.modelDefinition!.manufacturerName}".bodyText(context), InfoTextWidget(label: context.translation.manufacture, value: assetModel.modelDefinition!.manufacturerName, showEmptyValue: true),
//"${context.translation.location}: ${assetModel.site.custName?.cleanupWhitespace?.capitalizeFirstOfEach}".bodyText(context),
], ],
).expanded, ).expanded,
8.width, 8.width,
@ -117,12 +118,12 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
children: [ children: [
/// TODO: theres no [ORACLE CODE] available to preview /// TODO: theres no [ORACLE CODE] available to preview
// "${context.translation.oracleCode}: ${"-"}".bodyText(context), // "${context.translation.oracleCode}: ${"-"}".bodyText(context),
"${context.translation.snNo}: ${assetModel.multiAssets!.first.assetSerialNo}".bodyText(context), InfoTextWidget(label: context.translation.snNo, value: assetModel.multiAssets!.first.assetSerialNo, showEmptyValue: true),
"${context.translation.site}: ${assetModel.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.site, value: assetModel.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach, showEmptyValue: true),
"${context.translation.building}: ${assetModel.building?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.building, value: assetModel.building?.name?.cleanupWhitespace.capitalizeFirstOfEach, showEmptyValue: true),
"${context.translation.floor}: ${assetModel.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.floor, value: assetModel.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach, showEmptyValue: true),
"${context.translation.md}: ${assetModel.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.md, value: assetModel.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach, showEmptyValue: true),
"${context.translation.room}: ${assetModel.room?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.room, value: assetModel.room?.name?.cleanupWhitespace.capitalizeFirstOfEach, showEmptyValue: true),
], ],
).expanded, ).expanded,
], ],
@ -130,14 +131,13 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
8.height, 8.height,
const Divider(color: AppColor.neutral30, height: 1, thickness: 1), const Divider(color: AppColor.neutral30, height: 1, thickness: 1),
8.height, 8.height,
"${context.translation.installationDate}: ${assetModel.installationDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.installationDate, value: assetModel.installationDate?.toAssetDetailsFormat, showEmptyValue: true),
"${context.translation.nextPmDate}: ${assetModel.nextPMDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.nextPmDate, value: assetModel.nextPMDate?.toAssetDetailsFormat, showEmptyValue: true),
"${context.translation.lastPmDate}: ${assetModel.lastPMDate?.toAssetDetailsFormat ?? "-"}".bodyText(context), InfoTextWidget(label: context.translation.lastPmDate, value: assetModel.lastPMDate?.toAssetDetailsFormat, showEmptyValue: true),
if ((assetModel.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[ if ((assetModel.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[
8.height, 8.height,
const Divider(color: AppColor.neutral30, height: 1, thickness: 1), const Divider().defaultStyle(context),
8.height, InfoTextWidget(label: assetModel.modelDefinition!.assetDescription!, showEmptyValue: true, isMsg: true),
assetModel.modelDefinition!.assetDescription!.bodyText(context),
] ]
], ],
) )

@ -60,7 +60,7 @@ class AssetItemListView extends StatelessWidget {
children: [ children: [
Text( Text(
context.translation.viewDetails, context.translation.viewDetails,
style: AppTextStyles.bodyText2.copyWith(color: AppColor.blueStatus(context)), style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10),
), ),
4.width, 4.width,
const Icon(Icons.arrow_forward, color: AppColor.primary10, size: 14) const Icon(Icons.arrow_forward, color: AppColor.primary10, size: 14)

@ -4,6 +4,8 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart'; import 'package:test_sa/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart';
import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
import 'package:test_sa/views/widgets/qr/asset_scan_qr.dart'; import 'package:test_sa/views/widgets/qr/asset_scan_qr.dart';
import '../../../models/device/asset.dart'; import '../../../models/device/asset.dart';
@ -65,18 +67,18 @@ class AssetPicker extends StatelessWidget {
height: 50.toScreenHeight, height: 50.toScreenHeight,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: buttonColor ?? backgroundColor ?? AppColor.blueStatus(context), color: buttonColor ?? backgroundColor ?? AppColor.primary10,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
border: showBorder ? Border.all(color: borderColor ?? AppColor.blueStatus(context), width: 2) : null, border: showBorder ? Border.all(color: borderColor ?? AppColor.border2Color(context), width: 1) : null,
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)], // boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
), ),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
"scan_asset".toSvgAsset(height: 22, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.neutral20 : iconColor ?? Colors.white), "scan_asset".toSvgAsset(height: 22, fit: BoxFit.fitHeight, color: AppColor.white10),
8.width, 8.width,
' ${label ?? "Scan or Pick Asset"}'.bodyText(context).custom(color: context.isDark ? AppColor.neutral20 : labelColor ?? Colors.white), ' ${label ?? "Scan or Pick Asset"}'.bodyText(context).custom(color: AppColor.white10),
], ],
), ),
).onPress(() async { ).onPress(() async {
@ -107,16 +109,20 @@ class AssetPicker extends StatelessWidget {
height: 50, height: 50,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(10), border: Border.all(color: borderColor ?? AppColor.blueStatus(context), width: 2), // // color: Colors.white,
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)], // borderRadius: BorderRadius.circular(10),
// border: Border.all(color: borderColor ?? AppColor.border2Color(context), width: 1),
color: buttonColor ?? backgroundColor ?? AppColor.primary10,
borderRadius: BorderRadius.circular(10),
border: showBorder ? Border.all(color: borderColor ?? AppColor.border2Color(context), width: 1) : null,
), ),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
"scan_asset".toSvgAsset(height: 22, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.neutral20 : AppColor.neutral120), "scan_asset".toSvgAsset(height: 22, fit: BoxFit.fitHeight, color: AppColor.white10),
8.width, 8.width,
"Re-Scan or Pick Asset".bodyText(context).custom(color: context.isDark ? AppColor.neutral20 : AppColor.black20), "Re-Scan or Pick Asset".bodyText(context).custom(color: AppColor.white10),
], ],
), ),
).onPress(() async { ).onPress(() async {
@ -159,39 +165,25 @@ class AssetPicker extends StatelessWidget {
return Container( return Container(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: showLoading ? Colors.white : const Color(0xffF4F6FC), color: showLoading ? Colors.white : AppColor.background(context),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(16),
border: Border.all( border: Border.all(color: borderColor ?? AppColor.borderColor(context)),
color: const Color(0xff212936).withOpacity(.03),
),
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Row( Row(
children: [ children: [
Text( InfoHeaderWidget(
device.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", device.modelDefinition?.assetName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
style: TextStyle(
fontSize: 14.toScreenWidth,
fontWeight: FontWeight.w500,
fontStyle: FontStyle.normal,
color: Colors.black87,
decoration: TextDecoration.none,
),
).toShimmer(isShow: showLoading, context: context).expanded, ).toShimmer(isShow: showLoading, context: context).expanded,
const Icon( Icon(Icons.info, color: AppColor.icon2Color(context), size: 20).onPress(() {
Icons.info,
color: Color(0xff7D859A),
size: 20,
).onPress(() {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
isScrollControlled: true, isScrollControlled: true,
backgroundColor: AppColor.bottomSheetColor(context),
shape: const RoundedRectangleBorder( shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
top: Radius.circular(20),
),
), ),
clipBehavior: Clip.antiAliasWithSaveLayer, clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => AssetDetailBottomSheet(device), builder: (BuildContext context) => AssetDetailBottomSheet(device),
@ -206,10 +198,12 @@ class AssetPicker extends StatelessWidget {
], ],
), ),
8.height, 8.height,
"${context.translation.assetNo}: ${device.assetNumber}".bodyText2(context).toShimmer(isShow: showLoading, context: context), InfoTextWidget(label: context.translation.assetNo, value: device.assetNumber).toShimmer(isShow: showLoading, context: context),
2.height, // 2.height,
// "${context.translation.manufacture}: ${device.modelDefinition?.manufacturerName}".bodyText(context), // "${context.translation.manufacture}: ${device.modelDefinition?.manufacturerName}".bodyText(context),
"${context.translation.model}: ${device.modelDefinition?.modelName}".bodyText2(context).toShimmer(isShow: showLoading, context: context), InfoTextWidget(label: context.translation.model, value: device.modelDefinition?.modelName).toShimmer(isShow: showLoading, context: context),
// "${context.translation.model}: ${device.modelDefinition?.modelName}".bodyText2(context).toShimmer(isShow: showLoading, context: context),
// "${context.translation.serialNumber}: ${device.assetNumber}".bodyText(context), // "${context.translation.serialNumber}: ${device.assetNumber}".bodyText(context),
// const Divider().defaultStyle(context), // const Divider().defaultStyle(context),
// "${context.translation.department}: ${device.department?.departmentName}".bodyText(context), // "${context.translation.department}: ${device.department?.departmentName}".bodyText(context),

@ -228,7 +228,8 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
), ),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
heroTag: "some tag 2", heroTag: "some tag 2",
child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: Theme.of(context).scaffoldBackgroundColor), backgroundColor: AppColor.primary10,
child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: AppColor.background(context)),
onPressed: () async { onPressed: () async {
String? result = await Navigator.of(context).push( String? result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()), MaterialPageRoute(builder: (_) => const ScanQr()),
@ -299,10 +300,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
), ),
child: Text( child: Text(
'Clear Filters', 'Clear Filters',
style: AppTextStyles.tinyFont.copyWith( style: AppTextStyles.tinyFont.copyWith(color: AppColor.red30),
color: AppColor.primary10,
fontWeight: FontWeight.w500,
),
), ),
), ),
], ],
@ -464,7 +462,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
// Date Range // Date Range
if (_searchAsset?.supplyDateFrom != null || _searchAsset?.supplyDateTo != null) { if (_searchAsset?.supplyDateFrom != null || _searchAsset?.supplyDateTo != null) {
String dateLabel = 'Supply Date: '; String dateLabel = 'Date: ';
if (_searchAsset!.supplyDateFrom != null && _searchAsset!.supplyDateTo != null) { if (_searchAsset!.supplyDateFrom != null && _searchAsset!.supplyDateTo != null) {
dateLabel += '${_formatDate(_searchAsset!.supplyDateFrom!)} - ${_formatDate(_searchAsset!.supplyDateTo!)}'; dateLabel += '${_formatDate(_searchAsset!.supplyDateFrom!)} - ${_formatDate(_searchAsset!.supplyDateTo!)}';
} else if (_searchAsset!.supplyDateFrom != null) { } else if (_searchAsset!.supplyDateFrom != null) {

@ -22,23 +22,25 @@ class _HorizontalListWidgetState extends State<HorizontalListWidget> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return SizedBox(
height: 35.toScreenHeight, height: 35.toScreenHeight,
child: ListView.builder( child: ListView.separated(
itemCount: widget.list.length, itemCount: widget.list.length,
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
shrinkWrap: true, shrinkWrap: true,
padding: EdgeInsetsDirectional.only(start: 16.toScreenWidth, end: 16), padding: EdgeInsetsDirectional.only(start: 16.toScreenWidth, end: 16),
separatorBuilder: (cxt, index) => 8.width,
itemBuilder: (context, index) => Container( itemBuilder: (context, index) => Container(
margin: EdgeInsets.symmetric(horizontal: 4.toScreenWidth), // margin: EdgeInsets.symmetric(horizontal: 4.toScreenWidth),
padding: EdgeInsets.symmetric(horizontal: 20.toScreenWidth), padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 12.toScreenWidth),
alignment: Alignment.center, alignment: Alignment.center,
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: _selectedIndex == index ? Colors.transparent : AppColor.selectedButtonColor(context), color: AppColor.background(context),
shadows: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14, offset: const Offset(0, 0), spreadRadius: 0)],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
side: _selectedIndex == index ? BorderSide(width: 2, color: (context.isDark ? AppColor.backgroundLight : AppColor.backgroundDark)) : BorderSide.none, side: BorderSide(width: 1, color: _selectedIndex == index ? AppColor.primary10 : AppColor.border2Color(context)),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(6),
), ),
), ),
child: (widget.list[index]).tinyFont(context).custom(color: AppColor.filterButtonTextColor(context)), child: widget.list[index].tinyFont(context).custom(color: _selectedIndex == index ? AppColor.primary10 : AppColor.filterButtonTextColor(context)),
).onPress(() { ).onPress(() {
setState(() { setState(() {
_selectedIndex = index; _selectedIndex = index;

@ -482,19 +482,20 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
return Container( return Container(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: AppColor.background(context),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(16),
border: Border.all(color: const Color(0xffF1F1F1), width: 1), border: Border.all(color: AppColor.borderColor(context), width: 2),
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Icon(iconData, color: const Color(0xff7D859A), size: 36), Icon(iconData, color: AppColor.icon2Color(context), size: 24),
Text( title.bodyText2(context).custom(color: AppColor.labelTextStyleColor(context), fontSize: context.isTablet() ? 10.toScreenWidth : null),
title, // Text(
style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500), // title,
), // style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500),
// ),
], ],
), ),
); );
@ -509,20 +510,15 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.background(context), color: AppColor.background(context),
// color: Colors.white, borderRadius: BorderRadius.circular(16),
borderRadius: BorderRadius.circular(12), border: Border.all(color: AppColor.borderColor(context), width: 2),
border: Border.all(color: const Color(0xffF1F1F1), width: 1),
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
icon.toSvgAsset(color: AppColor.iconColor(context), width: 36, height: 36), icon.toSvgAsset(color: AppColor.icon2Color(context), width: 36, height: 36),
// Icon(iconData, color: const Color(0xff7D859A), size: 36), label.bodyText2(context).custom(color: AppColor.labelTextStyleColor(context), fontSize: context.isTablet() ? 10.toScreenWidth : null),
Text(
label,
style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500),
),
], ],
), ),
).onPress(onTap); ).onPress(onTap);

@ -64,14 +64,14 @@ class MultiFilesPickerItem extends StatelessWidget {
Flexible( Flexible(
child: EllipsizedText( child: EllipsizedText(
file.path.split("/").last, file.path.split("/").last,
style: AppTextStyles.bodyText.copyWith(color: AppColor.black10), style: AppTextStyles.bodyText.copyWith(color: AppColor.labelTextStyleColor(context)),
type: EllipsisType.start, // or EllipsisType.middle type: EllipsisType.start, // or EllipsisType.middle
), ),
), ),
8.width, 8.width,
if (enabled) if (enabled)
InkWell( InkWell(
child: "remove".toSvgAsset(width: 16), child: "remove".toSvgAsset(width: 16,color: AppColor.red30),
onTap: () { onTap: () {
onRemoveTap(file); onRemoveTap(file);
if (onRemove != null) { if (onRemove != null) {
@ -85,7 +85,7 @@ class MultiFilesPickerItem extends StatelessWidget {
RichText( RichText(
text: TextSpan( text: TextSpan(
text: documentType == null ? 'Asset Guide | ' : '$documentType | ', text: documentType == null ? 'Asset Guide | ' : '$documentType | ',
style: AppTextStyles.bodyText.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: AppColor.lightTextColor(context)),
children: <TextSpan>[ children: <TextSpan>[
TextSpan( TextSpan(
text: 'View', text: 'View',

@ -174,19 +174,20 @@ class _MultiFilesPickerState extends State<NewMultiFilesPicker> {
return Container( return Container(
padding: EdgeInsets.all(12), padding: EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: AppColor.background(context),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(16),
border: Border.all(color: Color(0xffF1F1F1), width: 1), border: Border.all(color: AppColor.borderColor(context), width: 2),
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Icon(iconData, color: Color(0xff7D859A), size: 36), Icon(iconData, color: AppColor.icon2Color(context), size: 36),
Text( title.bodyText2(context).custom(color: AppColor.labelTextStyleColor(context), fontSize: context.isTablet() ? 10.toScreenWidth : null),
title, // Text(
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500), // title,
), // style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500),
// ),
], ],
), ),
); );

@ -10,3 +10,11 @@ class InfoHeaderWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) => Text(label, style: AppTextStyles.bodyText.copyWith(color: AppColor.textStyleColor(context))); Widget build(BuildContext context) => Text(label, style: AppTextStyles.bodyText.copyWith(color: AppColor.textStyleColor(context)));
} }
class InfoHeader16Widget extends StatelessWidget {
final String label;
InfoHeader16Widget(this.label, {Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => Text(label, style: AppTextStyles.heading6.copyWith(color: AppColor.textStyleColor(context)));
}

@ -153,10 +153,12 @@ class _ScannerOverlay extends StatelessWidget {
), ),
SafeArea( SafeArea(
child: Padding( child: Padding(
padding: const EdgeInsets.all(12.0), padding: const EdgeInsets.all(16.0),
child: AIconButton( child: FloatingActionButton(
iconData: Icons.arrow_back, heroTag: "some tag 3",
backgroundColor: AppColor.background(context),
onPressed: onBack, onPressed: onBack,
child: Icon(Icons.arrow_back, size: 24.toScreenWidth, color: AppColor.icon2Color(context)),
), ),
), ),
), ),

@ -29,7 +29,7 @@ class TextSpeechRecordWidget extends StatefulWidget {
final Function(String) onMessageChange; final Function(String) onMessageChange;
final String initialMessage; final String initialMessage;
const TextSpeechRecordWidget({Key? key, required this.onRecord, this.onStop, this.enabled = true,required this.onMessageChange,required this.initialMessage}) : super(key: key); const TextSpeechRecordWidget({Key? key, required this.onRecord, this.onStop, this.enabled = true, required this.onMessageChange, required this.initialMessage}) : super(key: key);
@override @override
State<TextSpeechRecordWidget> createState() => _RecordSoundState(); State<TextSpeechRecordWidget> createState() => _RecordSoundState();
@ -75,7 +75,7 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
_commentController = TextEditingController(); _commentController = TextEditingController();
node.unfocus(); node.unfocus();
_recorderIsOpened = true; _recorderIsOpened = true;
_settingProvider = Provider.of(context,listen: false); _settingProvider = Provider.of(context, listen: false);
} }
@override @override
@ -189,8 +189,9 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
controller: _commentController, controller: _commentController,
labelText: _speechToText.isListening ? "Listening..." : context.translation.callComments, labelText: _speechToText.isListening ? "Listening..." : context.translation.callComments,
alignLabelWithHint: true, alignLabelWithHint: true,
isBackgroundTransparent: true,
showWithoutDecoration: true, showWithoutDecoration: true,
backgroundColor: Colors.transparent, // backgroundColor: Colors.transparent,
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
// suffixIcon: // suffixIcon:
// (_recording ? "record".toLottieAsset(height: 24) : (_record != null ? "trash" : "mic").toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, height: 24)) // (_recording ? "record".toLottieAsset(height: 24) : (_record != null ? "trash" : "mic").toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, height: 24))
@ -204,20 +205,14 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
}, },
).expanded, ).expanded,
(_speechToText.isListening (_speechToText.isListening
? SizedBox( ? SizedBox(height: 24.toScreenHeight, width: 24.toScreenWidth, child: const Icon(Icons.fiber_manual_record, color: AppColor.red30)).onPress(() {
height: 24.toScreenHeight,
width: 24.toScreenWidth,
child: const Icon(
Icons.fiber_manual_record,
color: Colors.red,
)).onPress(() {
_stopListening(); _stopListening();
}) })
: PopupMenuButton<String>( : PopupMenuButton<String>(
child: SizedBox( child: SizedBox(
height: 24.toScreenHeight, height: 24.toScreenHeight,
width: 24.toScreenWidth, width: 24.toScreenWidth,
child: "speech_to_text".toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, height: 24, width: 24), child: "speech_to_text".toSvgAsset(color: AppColor.icon2Color(context), height: 24, width: 24),
), ),
onSelected: (String selectedLanguage) { onSelected: (String selectedLanguage) {
_settingProvider.setSpeechToText(selectedLanguage); _settingProvider.setSpeechToText(selectedLanguage);
@ -243,9 +238,9 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
AppTextFormField( AppTextFormField(
enable: widget.enabled, enable: widget.enabled,
node: node, node: node,
backgroundColor: Colors.transparent, isBackgroundTransparent: true,
showWithoutDecoration: true,
controller: _timeController, controller: _timeController,
showBorder: false,
labelText: context.translation.recordVoice, labelText: context.translation.recordVoice,
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
alignLabelWithHint: true, alignLabelWithHint: true,
@ -290,9 +285,7 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
SizedBox( SizedBox(
height: _recording ? 40 : 24.toScreenHeight, height: _recording ? 40 : 24.toScreenHeight,
width: _recording ? 40 : 24.toScreenWidth, width: _recording ? 40 : 24.toScreenWidth,
child: (_recording child: (_recording ? "record".toLottieAsset(height: 24) : (_record != null ? "trash" : "mic").toSvgAsset(color: AppColor.icon2Color(context), height: 24, width: 24)),
? "record".toLottieAsset(height: 24)
: (_record != null ? "trash" : "mic").toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, height: 24, width: 24)),
).paddingOnly(end: 16, top: 16).onPress(() { ).paddingOnly(end: 16, top: 16).onPress(() {
if (_recording) { if (_recording) {
_stopRecording(); _stopRecording();

@ -1,6 +1,7 @@
import 'package:audioplayers/audioplayers.dart'; import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/app_style/app_text_style.dart'; import 'package:test_sa/new_views/app_style/app_text_style.dart';
@ -32,15 +33,11 @@ class _ASoundPlayerState extends State<ASoundPlayer> {
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),
), ),
), ),
child: Icon( child: Icon(icon, size: 30, color: (AppColor.primary10)),
icon,
size: 30,
color: (context.isDark ? AppColor.primary40 : AppColor.primary70).withOpacity(0.5),
),
).onPress(onpress); ).onPress(onpress);
} }
@ -182,8 +179,8 @@ class _ASoundPlayerState extends State<ASoundPlayer> {
value: _audioPosition?.inMilliseconds.toDouble() ?? 0.0, value: _audioPosition?.inMilliseconds.toDouble() ?? 0.0,
min: 0, min: 0,
max: _audioTime?.inMilliseconds.toDouble() ?? 60.0, max: _audioTime?.inMilliseconds.toDouble() ?? 60.0,
activeColor: context.isDark ? AppColor.primary40 : AppColor.primary70, activeColor: AppColor.primary10,
inactiveColor: context.isDark ? AppColor.neutral20 : AppColor.neutral30, inactiveColor: AppColor.border2Color(context),
onChangeStart: (value) { onChangeStart: (value) {
_sliderMoving = true; _sliderMoving = true;
}, },
@ -199,9 +196,8 @@ class _ASoundPlayerState extends State<ASoundPlayer> {
), ),
).paddingOnly(start: 8, end: 8).expanded, ).paddingOnly(start: 8, end: 8).expanded,
_failedToLoad _failedToLoad
? Text("Failed to load", style: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60)) ? Text("Failed to load", style: AppTextStyles.tinyFont.copyWith(color: AppColor.textStyleColor(context)))
: Text("${format(_audioPosition ?? Duration.zero)}/${format(_audioTime ?? Duration.zero)}", : Text("${format(_audioPosition ?? Duration.zero)}/${format(_audioTime ?? Duration.zero)}", style: AppTextStyles.tinyFont.copyWith(color: AppColor.textStyleColor(context))),
style: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
], ],
), ),
], ],

Loading…
Cancel
Save