diff --git a/assets/images/search.svg b/assets/images/search.svg
new file mode 100644
index 00000000..a991c00a
--- /dev/null
+++ b/assets/images/search.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb
index aed0f553..b175041e 100644
--- a/lib/l10n/app_ar.arb
+++ b/lib/l10n/app_ar.arb
@@ -37,6 +37,7 @@
"back": "السابق",
"search": "بحث",
"searchByName": "بحث بالاسم",
+ "searchByAssetNumber": "بحث برقم الجهاز",
"address": "العنوان",
"addressNotFound": "لا يوجد عنوان",
"addressValidateMessage": "العنوان مطلوب",
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 29433d6f..69dc34fe 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -37,6 +37,7 @@
"back": "Back",
"search": "Search",
"searchByName": "Search by name",
+ "searchByAssetNumber": "Search by asset number",
"address": "Address",
"addressNotFound": "Address not found",
"addressValidateMessage": "Address validateMessage",
diff --git a/lib/new_views/common_widgets/app_text_form_field.dart b/lib/new_views/common_widgets/app_text_form_field.dart
index e9d97aee..cfa71a3e 100644
--- a/lib/new_views/common_widgets/app_text_form_field.dart
+++ b/lib/new_views/common_widgets/app_text_form_field.dart
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
-import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/app_style/app_text_style.dart';
@@ -20,11 +19,13 @@ class AppTextFormField extends StatefulWidget {
final TextAlign textAlign;
final FocusNode node;
final Widget suffixIcon;
+ final Widget prefixIcon;
final IconData prefixIconData;
final int prefixIconSize;
final TextEditingController controller;
final TextInputAction textInputAction;
final VoidCallback onAction;
+ final Color backgroundColor;
const AppTextFormField({
Key key,
@@ -42,11 +43,13 @@ class AppTextFormField extends StatefulWidget {
this.style,
this.textAlign,
this.suffixIcon,
+ this.prefixIcon,
this.prefixIconData,
this.prefixIconSize,
this.controller,
this.textInputAction,
this.onAction,
+ this.backgroundColor,
}) : super(key: key);
@override
@@ -93,19 +96,20 @@ class _AppTextFormFieldState extends State {
constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(minWidth: 0),
filled: true,
- fillColor: context.isDark ? AppColor.neutral50 : Colors.white,
+ fillColor: widget.backgroundColor ?? (context.isDark ? AppColor.neutral50 : Colors.white),
errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60),
floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20),
hintText: widget.hintText ?? "",
labelText: widget.labelText ?? "",
- suffixIcon: widget.suffixIcon ??
+ prefixIcon: widget.prefixIcon ??
(widget.prefixIconData == null
? null
: Icon(
- widget.prefixIconData,
- size: widget.prefixIconSize == null ? 20.toScreenWidth : (widget.prefixIconSize - 10).toScreenWidth,
- color: AppColor.neutral70,
- )),
+ widget.prefixIconData,
+ size: widget.prefixIconSize == null ? 20.toScreenWidth : (widget.prefixIconSize - 10).toScreenWidth,
+ color: AppColor.neutral70,
+ )),
+ suffixIcon: widget.suffixIcon,
),
),
);
diff --git a/lib/new_views/common_widgets/asset_info_card.dart b/lib/new_views/common_widgets/asset_info_card.dart
new file mode 100644
index 00000000..983f9dbd
--- /dev/null
+++ b/lib/new_views/common_widgets/asset_info_card.dart
@@ -0,0 +1,33 @@
+import 'package:flutter/material.dart';
+import 'package:test_sa/extensions/context_extension.dart';
+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 '../../models/device/device.dart';
+
+class AssetInfoCard extends StatelessWidget {
+ const AssetInfoCard({Key key, @required this.asset}) : super(key: key);
+
+ final Device asset;
+
+ @override
+ Widget build(BuildContext context) {
+ return Card(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ asset.modelDefinition?.assetName?.heading5(context),
+ 8.height,
+ "${context.translation.assetNo}: ${asset.assetNumber}".bodyText(context),
+ "${context.translation.manufacture}: ${asset.modelDefinition?.manufacturerName}".bodyText(context),
+ "${context.translation.model}: ${asset.modelDefinition?.modelName}".bodyText(context),
+ "${context.translation.serialNumber}: ${asset.assetNumber}".bodyText(context),
+ const Divider().defaultStyle(context),
+ "${context.translation.department}: ${asset.department?.departmentName}".bodyText(context),
+ "${context.translation.site}: ${asset.site?.custName}".bodyText(context),
+ ],
+ ).paddingAll(16),
+ );
+ }
+}
diff --git a/lib/views/widgets/equipment/pick_asset.dart b/lib/views/widgets/equipment/pick_asset.dart
index 06faaf8a..3bcd1100 100644
--- a/lib/views/widgets/equipment/pick_asset.dart
+++ b/lib/views/widgets/equipment/pick_asset.dart
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
-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/equipment/single_device_picker.dart';
import '../../../models/device/device.dart';
import '../../../new_views/app_style/app_color.dart';
+import '../../../new_views/common_widgets/asset_info_card.dart';
class PickAsset extends StatelessWidget {
final Function(Device) onPickAsset;
@@ -36,29 +36,11 @@ class PickAsset extends StatelessWidget {
Device device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device;
onPickAsset(device);
}).expanded,
- "qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight).onPress(() {
- /// TODO [Zaid] : open qr reader
- }),
+ "qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70),
],
).paddingOnly(start: 16, end: 16, top: 8, bottom: 8),
),
- if (device != null)
- Card(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.stretch,
- children: [
- device.modelDefinition?.assetName?.heading5(context),
- 8.height,
- "${context.translation.assetNo}: ${device.assetNumber}".bodyText(context),
- "${context.translation.manufacture}: ${device.modelDefinition?.manufacturerName}".bodyText(context),
- "${context.translation.model}: ${device.modelDefinition?.modelName}".bodyText(context),
- "${context.translation.serialNumber}: ${device.assetNumber}".bodyText(context),
- const Divider().defaultStyle(context),
- "${context.translation.department}: ${device.department?.departmentName}".bodyText(context),
- "${context.translation.site}: ${device.site?.custName}".bodyText(context),
- ],
- ).paddingAll(16),
- ).paddingOnly(top: 8),
+ if (device != null) AssetInfoCard(asset: device).paddingOnly(top: 8),
],
);
}
diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart
index 744c4bc7..64c83bde 100644
--- a/lib/views/widgets/equipment/single_device_picker.dart
+++ b/lib/views/widgets/equipment/single_device_picker.dart
@@ -1,17 +1,20 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
-import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/devices_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/views/widgets/equipment/device_item.dart';
+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/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import '../../../models/device/device.dart';
-import '../app_text_form_field.dart';
+import '../../../new_views/app_style/app_color.dart';
+import '../../../new_views/common_widgets/asset_info_card.dart';
import '../qr/scan_qr.dart';
class SingleDevicePicker extends StatefulWidget {
@@ -30,7 +33,6 @@ class _SingleDevicePickerState extends State {
List _initList = [];
bool _firstTime = true;
-
TextEditingController numberController = TextEditingController();
TextEditingController snController = TextEditingController();
@@ -100,11 +102,11 @@ class _SingleDevicePickerState extends State {
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: Column(
children: [
- ATextFormField(
- hintText: "Search by Asset Number",
+ AppTextFormField(
+ labelText: context.translation.searchByAssetNumber,
controller: numberController,
- style: Theme.of(context).textTheme.subtitle1,
- suffixIcon: const Icon(Icons.search_rounded),
+ prefixIcon: "search".toSvgAsset().paddingAll(16),
+ backgroundColor: context.isDark ? AppColor.neutral40 : AppColor.neutral30,
textInputAction: TextInputAction.search,
onAction: () async {
_devicesProvider.reset();
@@ -117,11 +119,11 @@ class _SingleDevicePickerState extends State {
const SizedBox(
height: 8,
),
- ATextFormField(
- hintText: context.translation.searchBySn,
+ AppTextFormField(
+ labelText: context.translation.searchBySn,
controller: snController,
- style: Theme.of(context).textTheme.subtitle1,
- suffixIcon: const Icon(Icons.search_rounded),
+ prefixIcon: "search".toSvgAsset().paddingAll(16),
+ backgroundColor: context.isDark ? AppColor.neutral40 : AppColor.neutral30,
textInputAction: TextInputAction.search,
onAction: () async {
_devicesProvider.reset();
@@ -146,16 +148,13 @@ class _SingleDevicePickerState extends State {
user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text);
},
child: ListView.builder(
- padding: EdgeInsets.zero,
+ padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
shrinkWrap: true,
itemCount: _searchableList.length,
itemBuilder: (listContext, itemIndex) {
- return DeviceItem(
- device: _searchableList[itemIndex],
- onPressed: (device) {
- Navigator.of(context).pop(device);
- },
- );
+ return AssetInfoCard(asset: _searchableList[itemIndex]).onPress(() {
+ Navigator.of(context).pop(_searchableList[itemIndex]);
+ });
},
),
)),
@@ -165,7 +164,7 @@ class _SingleDevicePickerState extends State {
),
floatingActionButton: FloatingActionButton(
heroTag: "some tag 2",
- child: const Icon(Icons.qr_code_scanner),
+ child: "qr".toSvgAsset(height: 32, fit: BoxFit.fitHeight, color: Theme.of(context).scaffoldBackgroundColor),
onPressed: () async {
String result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()),
diff --git a/lib/views/widgets/sound/sound_player.dart b/lib/views/widgets/sound/sound_player.dart
index ab687517..ae1ed9bb 100644
--- a/lib/views/widgets/sound/sound_player.dart
+++ b/lib/views/widgets/sound/sound_player.dart
@@ -1,5 +1,6 @@
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
+import 'package:test_sa/extensions/context_extension.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';
@@ -30,13 +31,14 @@ class _ASoundPlayerState extends State {
decoration: ShapeDecoration(
color: Theme.of(context).cardColor,
shape: RoundedRectangleBorder(
- side: const BorderSide(width: 1, color: Color(0xFFEAF1F4)),
+ side: BorderSide(width: 1, color: (context.isDark ? AppColor.neutral20 : AppColor.neutral30)),
borderRadius: BorderRadius.circular(32),
),
),
child: Icon(
icon,
- color: Theme.of(context).primaryColor,
+ size: 30,
+ color: (context.isDark ? AppColor.primary40 : AppColor.primary70).withOpacity(0.5),
),
).onPress(onpress);
}
@@ -63,7 +65,7 @@ class _ASoundPlayerState extends State {
rebuild();
});
case PlayerState.stopped:
- return audioPlayerButton(_isLocalFile ? Icons.play_circle_fill_outlined : Icons.download_rounded, () async {
+ return audioPlayerButton(_isLocalFile ? Icons.play_arrow_rounded : Icons.download_rounded, () async {
_failedToLoad = false;
try {
await _audioPlayer.play(
@@ -179,7 +181,7 @@ class _ASoundPlayerState extends State {
value: _audioPosition?.inMilliseconds?.toDouble() ?? 0.0,
min: 0,
max: _audioTime?.inMilliseconds?.toDouble() ?? 60.0,
- activeColor: Theme.of(context).primaryColor,
+ activeColor: context.isDark ? AppColor.primary40 : AppColor.primary70,
inactiveColor: AppColor.neutral30,
onChangeStart: (value) {
_sliderMoving = true;