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,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120),
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
),
12.height,
AppTextFormField(

@ -158,13 +158,12 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
AttachmentPicker(
label: context.translation.attachImage,
attachment: _deviceImages,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120),
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
),
],
).paddingAll(0).toShadowContainer(context),
16.height,
12.height,
commentWidget(serviceRequest: _serviceRequest),
],
),
@ -202,7 +201,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
context.translation.assetStatus.bodyText(context).custom(color: AppColor.black20),
context.translation.assetStatus.bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height,
Wrap(
runSpacing: 8,
@ -222,7 +221,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
if (states.contains(WidgetState.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,
onChanged: (state) {
@ -232,7 +231,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
}),
),
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(
device: _serviceRequest.device,
showLoading: checkPendingRequest,
borderColor: AppColor.black20,
// borderColor: AppColor.black20,
onPick: (asset) async {
pendingAssetServiceRequest = null;
_serviceRequest.device = asset;
@ -262,7 +261,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
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, _) {
if (snapshot.items.isNotEmpty) {
_serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: () => Lookup());

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

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

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

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

@ -148,7 +148,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
enabled: demoDocumentLookup != null,
documentType: demoDocumentLookup,
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) {
_attachments = attachments;
setState(() {});

@ -227,7 +227,7 @@ class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with Tick
documentType: demoDocumentLookup,
enabled: demoDocumentLookup != null,
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),

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

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

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

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

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

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

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

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

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

@ -80,7 +80,7 @@ class _DeviceSearchScreenState extends State<DeviceSearchScreen> {
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
child: Text(
'Clear Filters',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
),
).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/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/default_app_bar.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/loaders/lazy_loading.dart';
@ -67,27 +68,7 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: CustomAppBar(
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 = "";
// });
// }),
// ],
// )
// ],
),
appBar: DefaultAppBar(title: context.translation.searchAsset),
body: Column(
children: [
HorizontalListWidget(
@ -117,10 +98,10 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
_setValue(value);
},
suffixIcon: IconButton(
icon: const Icon(Icons.search),
icon: Icon(Icons.search, color: AppColor.icon2Color(context)),
splashColor: Colors.transparent,
onPressed: _searchController.text.isNotEmpty ? _search : null,
color: AppColor.neutral20,
color: AppColor.icon2Color(context),
).paddingOnly(end: 0),
).paddingOnly(top: 16, start: 16, end: 16, bottom: 8),
),
@ -165,74 +146,73 @@ class _SearchDevicePageState extends State<SearchDevicePage> {
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,
if (widget.multiSelection && selectedAssets.isNotEmpty)
FooterActionButton.footerContainer(
context: context,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: AppFilledButton(
label: "Clear",
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
selectedAssets.clear();
setState(() {});
},
context: context,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: AppFilledButton(
label: "Clear",
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
selectedAssets.clear();
setState(() {});
},
),
),
),
12.width,
Expanded(
child: AppFilledButton(
label: context.translation.select,
buttonColor: AppColor.primary10,
loading: false,
onPressed: () async {
Navigator.of(context).pop();
List<Asset> assets = _searchableList.where((asset) => selectedAssets.contains(asset.id)).toList();
Navigator.of(context).pop(assets);
},
12.width,
Expanded(
child: AppFilledButton(
label: context.translation.select,
buttonColor: AppColor.primary10,
loading: false,
onPressed: () async {
Navigator.of(context).pop();
List<Asset> assets = _searchableList.where((asset) => selectedAssets.contains(asset.id)).toList();
Navigator.of(context).pop(assets);
},
),
),
),
],
)
),
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Expanded(
// child: AppFilledButton(
// label: "Clear",
// buttonColor: AppColor.white60,
// textColor: AppColor.black10,
// loading: false,
// onPressed: () async {
// selectedAssets.clear();
// setState(() {});
// },
// ),
// ),
// 12.width,
// Expanded(
// child: AppFilledButton(
// label: context.translation.select,
// buttonColor: AppColor.primary10,
// loading: false,
// onPressed: () async {
// Navigator.of(context).pop();
// List<Asset> assets = _searchableList.where((asset) => selectedAssets.contains(asset.id)).toList();
// Navigator.of(context).pop(assets);
// },
// ),
// ),
// ],
// ).toShadowContainer(context),
],
)),
// Row(
// mainAxisSize: MainAxisSize.min,
// children: [
// Expanded(
// child: AppFilledButton(
// label: "Clear",
// buttonColor: AppColor.white60,
// textColor: AppColor.black10,
// loading: false,
// onPressed: () async {
// selectedAssets.clear();
// setState(() {});
// },
// ),
// ),
// 12.width,
// Expanded(
// child: AppFilledButton(
// label: context.translation.select,
// buttonColor: AppColor.primary10,
// loading: false,
// onPressed: () async {
// Navigator.of(context).pop();
// List<Asset> assets = _searchableList.where((asset) => selectedAssets.contains(asset.id)).toList();
// Navigator.of(context).pop(assets);
// },
// ),
// ),
// ],
// ).toShadowContainer(context),
],
),
),

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

@ -219,7 +219,7 @@ class _GasRefillRequestFormState extends State<GasRefillRequestForm> {
attachment: attachments,
buttonColor: AppColor.black10,
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),

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

@ -111,13 +111,13 @@ class _CreateTaskViewState extends State<CreateTaskView> with TickerProviderStat
_addTaskModel?.callComment = value;
},
),
23.height,
24.height,
AttachmentPicker(
label: context.translation.attachImage,
attachment: attachments,
buttonColor: AppColor.black10,
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 ..
onChange: (attachments) {
attachments = attachments;

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

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

@ -28,7 +28,7 @@ class AppDashedButton extends StatelessWidget {
child: DottedBorder(
strokeWidth: 1,
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],
radius: const Radius.circular(10),
borderType: BorderType.RRect,
@ -38,10 +38,10 @@ class AppDashedButton extends StatelessWidget {
children: [
icon!,
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);
}

@ -47,7 +47,7 @@ class AppFilledButton extends StatelessWidget {
alignment: Alignment.center,
decoration: BoxDecoration(
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,
),
child: loading

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

@ -142,7 +142,7 @@ class CreateRequestModel {
// });
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));
}
}

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

@ -300,7 +300,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
child: Text(
'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)),
AdvancedSwitch(
controller: langController,
initialValue: langController!.value,
activeColor: AppColor.green50.withOpacity(0.5),
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)),
width: 42.toScreenWidth,
height: 24.toScreenHeight,
@ -130,9 +131,10 @@ class _SettingsPageState extends State<SettingsPage> {
context.translation.lightTheme.heading5(context).custom(color: AppColor.textStyleColor(context)),
AdvancedSwitch(
controller: themeController,
initialValue: themeController!.value,
activeColor: AppColor.green50.withOpacity(0.5),
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)),
width: 42.toScreenWidth,
height: 24.toScreenHeight,

@ -16,7 +16,7 @@ class SingleBtnDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Dialog(
backgroundColor: Colors.white,
backgroundColor: AppColor.background(context),
shape: const RoundedRectangleBorder(),
insetPadding: const EdgeInsets.only(left: 21, right: 21),
child: Padding(
@ -27,9 +27,9 @@ class SingleBtnDialog extends StatelessWidget {
children: [
Text(
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),
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,
AppFilledButton(
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/models/device/asset.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 {
Asset? asset;
@ -16,14 +18,14 @@ class AssetDetailBottomSheet extends StatelessWidget {
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom +
MediaQuery.of(context).padding.bottom,
bottom: MediaQuery.of(context).viewInsets.bottom + MediaQuery.of(context).padding.bottom,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
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,
AspectRatio(
aspectRatio: 358 / 136,
@ -52,33 +54,70 @@ class AssetDetailBottomSheet extends StatelessWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"${context.translation.assetNo}: ${asset!.assetNumber}".bodyText(context),
"${context.translation.modelName}: ${asset!.modelDefinition?.modelName}".bodyText(context),
"${context.translation.supplier}: ${asset!.supplier?.suppliername?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context),
"${context.translation.manufacture}: ${asset!.modelDefinition?.manufacturerName?.cleanupWhitespace.capitalizeFirstOfEach}".bodyText(context),
//"${context.translation.location}: ${assetModel.site.custName?.cleanupWhitespace?.capitalizeFirstOfEach}".bodyText(context),
InfoTextWidget(
label: context.translation.assetNo,
value: asset!.assetNumber,
showEmptyValue: true,
),
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,
8.width,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"${context.translation.snNo}: ${asset!.assetSerialNo}".bodyText(context),
"${context.translation.site}: ${asset?.site?.custName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context),
"${context.translation.building}: ${asset?.building?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context),
"${context.translation.floor}: ${asset?.floor?.name?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context),
"${context.translation.md}: ${asset?.department?.departmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "-"}".bodyText(context),
"${context.translation.room}: ${asset?.room?.name ?? "-"}".bodyText(context),
InfoTextWidget(
label: context.translation.snNo,
value: asset!.assetSerialNo,
showEmptyValue: true,
),
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,
],
),
8.height,
if ((asset?.modelDefinition?.assetDescription ?? "").isNotEmpty) ...[
8.height,
const Divider(color: AppColor.neutral30, height: 1, thickness: 1),
8.height,
asset!.modelDefinition!.assetDescription!.bodyText(context),
const Divider().defaultStyle(context),
InfoTextWidget(label: asset!.modelDefinition!.assetDescription!, isMsg: true, showEmptyValue: true),
]
],
)

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

@ -60,7 +60,7 @@ class AssetItemListView extends StatelessWidget {
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText2.copyWith(color: AppColor.blueStatus(context)),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary10),
),
4.width,
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/widget_extensions.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 '../../../models/device/asset.dart';
@ -65,18 +67,18 @@ class AssetPicker extends StatelessWidget {
height: 50.toScreenHeight,
alignment: Alignment.center,
decoration: BoxDecoration(
color: buttonColor ?? backgroundColor ?? AppColor.blueStatus(context),
color: buttonColor ?? backgroundColor ?? AppColor.primary10,
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)],
),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
child: Row(
mainAxisSize: MainAxisSize.min,
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,
' ${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 {
@ -107,16 +109,20 @@ class AssetPicker extends StatelessWidget {
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(10), border: Border.all(color: borderColor ?? AppColor.blueStatus(context), width: 2),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
// // color: Colors.white,
// 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),
child: Row(
mainAxisSize: MainAxisSize.min,
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,
"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 {
@ -159,39 +165,25 @@ class AssetPicker extends StatelessWidget {
return Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: showLoading ? Colors.white : const Color(0xffF4F6FC),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: const Color(0xff212936).withOpacity(.03),
),
color: showLoading ? Colors.white : AppColor.background(context),
borderRadius: BorderRadius.circular(16),
border: Border.all(color: borderColor ?? AppColor.borderColor(context)),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
Text(
InfoHeaderWidget(
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,
const Icon(
Icons.info,
color: Color(0xff7D859A),
size: 20,
).onPress(() {
Icon(Icons.info, color: AppColor.icon2Color(context), size: 20).onPress(() {
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: AppColor.bottomSheetColor(context),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(20),
),
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
),
clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => AssetDetailBottomSheet(device),
@ -206,10 +198,12 @@ class AssetPicker extends StatelessWidget {
],
),
8.height,
"${context.translation.assetNo}: ${device.assetNumber}".bodyText2(context).toShimmer(isShow: showLoading, context: context),
2.height,
InfoTextWidget(label: context.translation.assetNo, value: device.assetNumber).toShimmer(isShow: showLoading, context: context),
// 2.height,
// "${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),
// const Divider().defaultStyle(context),
// "${context.translation.department}: ${device.department?.departmentName}".bodyText(context),

@ -228,7 +228,8 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
),
floatingActionButton: FloatingActionButton(
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 {
String? result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()),
@ -299,10 +300,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
),
child: Text(
'Clear Filters',
style: AppTextStyles.tinyFont.copyWith(
color: AppColor.primary10,
fontWeight: FontWeight.w500,
),
style: AppTextStyles.tinyFont.copyWith(color: AppColor.red30),
),
),
],
@ -464,7 +462,7 @@ class _MyAssetsPageState extends State<MyAssetsPage> {
// Date Range
if (_searchAsset?.supplyDateFrom != null || _searchAsset?.supplyDateTo != null) {
String dateLabel = 'Supply Date: ';
String dateLabel = 'Date: ';
if (_searchAsset!.supplyDateFrom != null && _searchAsset!.supplyDateTo != null) {
dateLabel += '${_formatDate(_searchAsset!.supplyDateFrom!)} - ${_formatDate(_searchAsset!.supplyDateTo!)}';
} else if (_searchAsset!.supplyDateFrom != null) {

@ -22,23 +22,25 @@ class _HorizontalListWidgetState extends State<HorizontalListWidget> {
Widget build(BuildContext context) {
return SizedBox(
height: 35.toScreenHeight,
child: ListView.builder(
child: ListView.separated(
itemCount: widget.list.length,
scrollDirection: Axis.horizontal,
shrinkWrap: true,
padding: EdgeInsetsDirectional.only(start: 16.toScreenWidth, end: 16),
separatorBuilder: (cxt, index) => 8.width,
itemBuilder: (context, index) => Container(
margin: EdgeInsets.symmetric(horizontal: 4.toScreenWidth),
padding: EdgeInsets.symmetric(horizontal: 20.toScreenWidth),
// margin: EdgeInsets.symmetric(horizontal: 4.toScreenWidth),
padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 12.toScreenWidth),
alignment: Alignment.center,
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(
side: _selectedIndex == index ? BorderSide(width: 2, color: (context.isDark ? AppColor.backgroundLight : AppColor.backgroundDark)) : BorderSide.none,
borderRadius: BorderRadius.circular(7),
side: BorderSide(width: 1, color: _selectedIndex == index ? AppColor.primary10 : AppColor.border2Color(context)),
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(() {
setState(() {
_selectedIndex = index;

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

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

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

@ -10,3 +10,11 @@ class InfoHeaderWidget extends StatelessWidget {
@override
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(
child: Padding(
padding: const EdgeInsets.all(12.0),
child: AIconButton(
iconData: Icons.arrow_back,
padding: const EdgeInsets.all(16.0),
child: FloatingActionButton(
heroTag: "some tag 3",
backgroundColor: AppColor.background(context),
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 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
State<TextSpeechRecordWidget> createState() => _RecordSoundState();
@ -75,7 +75,7 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
_commentController = TextEditingController();
node.unfocus();
_recorderIsOpened = true;
_settingProvider = Provider.of(context,listen: false);
_settingProvider = Provider.of(context, listen: false);
}
@override
@ -189,8 +189,9 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
controller: _commentController,
labelText: _speechToText.isListening ? "Listening..." : context.translation.callComments,
alignLabelWithHint: true,
isBackgroundTransparent: true,
showWithoutDecoration: true,
backgroundColor: Colors.transparent,
// backgroundColor: Colors.transparent,
textInputType: TextInputType.multiline,
// suffixIcon:
// (_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,
(_speechToText.isListening
? SizedBox(
height: 24.toScreenHeight,
width: 24.toScreenWidth,
child: const Icon(
Icons.fiber_manual_record,
color: Colors.red,
)).onPress(() {
? SizedBox(height: 24.toScreenHeight, width: 24.toScreenWidth, child: const Icon(Icons.fiber_manual_record, color: AppColor.red30)).onPress(() {
_stopListening();
})
: PopupMenuButton<String>(
child: SizedBox(
height: 24.toScreenHeight,
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) {
_settingProvider.setSpeechToText(selectedLanguage);
@ -243,9 +238,9 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
AppTextFormField(
enable: widget.enabled,
node: node,
backgroundColor: Colors.transparent,
showWithoutDecoration: true,
isBackgroundTransparent: true,
controller: _timeController,
showBorder: false,
labelText: context.translation.recordVoice,
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
@ -290,9 +285,7 @@ class _RecordSoundState extends State<TextSpeechRecordWidget> {
SizedBox(
height: _recording ? 40 : 24.toScreenHeight,
width: _recording ? 40 : 24.toScreenWidth,
child: (_recording
? "record".toLottieAsset(height: 24)
: (_record != null ? "trash" : "mic").toSvgAsset(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20, height: 24, width: 24)),
child: (_recording ? "record".toLottieAsset(height: 24) : (_record != null ? "trash" : "mic").toSvgAsset(color: AppColor.icon2Color(context), height: 24, width: 24)),
).paddingOnly(end: 16, top: 16).onPress(() {
if (_recording) {
_stopRecording();

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

Loading…
Cancel
Save