Merge remote-tracking branch 'origin/main_design2.0' into main_design2.0

# Conflicts:
#	lib/views/widgets/equipment/single_device_picker.dart
main_design2.0
Sikander Saleem 2 years ago
commit 487b04514a

@ -0,0 +1,3 @@
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.9499 9.51862C12.6027 8.54479 12.984 7.37301 12.984 6.11339C12.984 2.74246 10.2534 0 6.89703 0C3.54065 0 0.810059 2.74246 0.810059 6.11336C0.810059 9.48425 3.54068 12.2267 6.89706 12.2267C8.176 12.2267 9.36378 11.8282 10.3445 11.1488L15.1958 16L16.8101 14.3788L11.9499 9.51862ZM6.89706 10.5097C4.48871 10.5097 2.52931 8.54181 2.52931 6.12299C2.52931 3.70421 4.48868 1.73634 6.89706 1.73634C9.30543 1.73634 11.2648 3.70421 11.2648 6.12302C11.2648 8.54184 9.3054 10.5097 6.89706 10.5097Z" fill="#767676"/>
</svg>

After

Width:  |  Height:  |  Size: 619 B

@ -37,6 +37,7 @@
"back": "السابق", "back": "السابق",
"search": "بحث", "search": "بحث",
"searchByName": "بحث بالاسم", "searchByName": "بحث بالاسم",
"searchByAssetNumber": "بحث برقم الجهاز",
"address": "العنوان", "address": "العنوان",
"addressNotFound": "لا يوجد عنوان", "addressNotFound": "لا يوجد عنوان",
"addressValidateMessage": "العنوان مطلوب", "addressValidateMessage": "العنوان مطلوب",

@ -37,6 +37,7 @@
"back": "Back", "back": "Back",
"search": "Search", "search": "Search",
"searchByName": "Search by name", "searchByName": "Search by name",
"searchByAssetNumber": "Search by asset number",
"address": "Address", "address": "Address",
"addressNotFound": "Address not found", "addressNotFound": "Address not found",
"addressValidateMessage": "Address validateMessage", "addressValidateMessage": "Address validateMessage",

@ -1,7 +1,6 @@
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/int_extensions.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_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';
@ -20,11 +19,13 @@ class AppTextFormField extends StatefulWidget {
final TextAlign textAlign; final TextAlign textAlign;
final FocusNode node; final FocusNode node;
final Widget suffixIcon; final Widget suffixIcon;
final Widget prefixIcon;
final IconData prefixIconData; final IconData prefixIconData;
final int prefixIconSize; final int prefixIconSize;
final TextEditingController controller; final TextEditingController controller;
final TextInputAction textInputAction; final TextInputAction textInputAction;
final VoidCallback onAction; final VoidCallback onAction;
final Color backgroundColor;
const AppTextFormField({ const AppTextFormField({
Key key, Key key,
@ -42,11 +43,13 @@ class AppTextFormField extends StatefulWidget {
this.style, this.style,
this.textAlign, this.textAlign,
this.suffixIcon, this.suffixIcon,
this.prefixIcon,
this.prefixIconData, this.prefixIconData,
this.prefixIconSize, this.prefixIconSize,
this.controller, this.controller,
this.textInputAction, this.textInputAction,
this.onAction, this.onAction,
this.backgroundColor,
}) : super(key: key); }) : super(key: key);
@override @override
@ -93,19 +96,20 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(minWidth: 0), suffixIconConstraints: const BoxConstraints(minWidth: 0),
filled: true, 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), errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60),
floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20),
hintText: widget.hintText ?? "", hintText: widget.hintText ?? "",
labelText: widget.labelText ?? "", labelText: widget.labelText ?? "",
suffixIcon: widget.suffixIcon ?? prefixIcon: widget.prefixIcon ??
(widget.prefixIconData == null (widget.prefixIconData == null
? null ? null
: Icon( : Icon(
widget.prefixIconData, widget.prefixIconData,
size: widget.prefixIconSize == null ? 20.toScreenWidth : (widget.prefixIconSize - 10).toScreenWidth, size: widget.prefixIconSize == null ? 20.toScreenWidth : (widget.prefixIconSize - 10).toScreenWidth,
color: AppColor.neutral70, color: AppColor.neutral70,
)), )),
suffixIcon: widget.suffixIcon,
), ),
), ),
); );

@ -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),
);
}
}

@ -1,12 +1,12 @@
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/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/equipment/single_device_picker.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import '../../../models/device/device.dart'; import '../../../models/device/device.dart';
import '../../../new_views/app_style/app_color.dart'; import '../../../new_views/app_style/app_color.dart';
import '../../../new_views/common_widgets/asset_info_card.dart';
class PickAsset extends StatelessWidget { class PickAsset extends StatelessWidget {
final Function(Device) onPickAsset; final Function(Device) onPickAsset;
@ -36,30 +36,12 @@ class PickAsset extends StatelessWidget {
Device device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device; Device device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device;
onPickAsset(device); onPickAsset(device);
}).expanded, }).expanded,
"qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight).onPress(() { "qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70),
/// TODO [Zaid] : open qr reader
}),
], ],
// TODO [Zaid] : if you have container as parent widget, no need to add padding widget separately // TODO [Zaid] : if you have container as parent widget, no need to add padding widget separately
).paddingOnly(start: 16, end: 16, top: 8, bottom: 8), ).paddingOnly(start: 16, end: 16, top: 8, bottom: 8),
), ),
if (device != null) if (device != null) AssetInfoCard(asset: device).paddingOnly(top: 8),
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),
], ],
); );
} }

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_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/controllers/providers/settings/setting_provider.dart';
@ -12,11 +11,13 @@ import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart';
import 'package:test_sa/views/widgets/equipment/asset_item_gridview.dart'; import 'package:test_sa/views/widgets/equipment/asset_item_gridview.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/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import '../../../models/device/device.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'; import '../qr/scan_qr.dart';
class SingleDevicePicker extends StatefulWidget { class SingleDevicePicker extends StatefulWidget {
@ -145,11 +146,11 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: Column( child: Column(
children: [ children: [
ATextFormField( AppTextFormField(
hintText: "Search by Asset Number", labelText: context.translation.searchByAssetNumber,
controller: numberController, controller: numberController,
style: Theme.of(context).textTheme.subtitle1, prefixIcon: "search".toSvgAsset().paddingAll(16),
suffixIcon: const Icon(Icons.search_rounded), backgroundColor: context.isDark ? AppColor.neutral40 : AppColor.neutral30,
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,
onAction: () async { onAction: () async {
_devicesProvider.reset(); _devicesProvider.reset();
@ -162,11 +163,11 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
const SizedBox( const SizedBox(
height: 8, height: 8,
), ),
ATextFormField( AppTextFormField(
hintText: context.translation.searchBySn, labelText: context.translation.searchBySn,
controller: snController, controller: snController,
style: Theme.of(context).textTheme.subtitle1, prefixIcon: "search".toSvgAsset().paddingAll(16),
suffixIcon: const Icon(Icons.search_rounded), backgroundColor: context.isDark ? AppColor.neutral40 : AppColor.neutral30,
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,
onAction: () async { onAction: () async {
_devicesProvider.reset(); _devicesProvider.reset();
@ -226,7 +227,7 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
), ),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
heroTag: "some tag 2", 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 { onPressed: () async {
String result = await Navigator.of(context).push( String result = await Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ScanQr()), MaterialPageRoute(builder: (_) => const ScanQr()),

@ -1,11 +1,9 @@
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/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';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../app_style/colors.dart';
class ASoundPlayer extends StatefulWidget { class ASoundPlayer extends StatefulWidget {
final String audio; final String audio;
@ -33,13 +31,14 @@ class _ASoundPlayerState extends State<ASoundPlayer> {
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: Colors.white, color: Colors.white,
shape: RoundedRectangleBorder( 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), borderRadius: BorderRadius.circular(32),
), ),
), ),
child: Icon( child: Icon(
icon, icon,
color: const Color(0xff163A51).withOpacity(0.5), size: 30,
color: (context.isDark ? AppColor.primary40 : AppColor.primary70).withOpacity(0.5),
), ),
).onPress(onpress); ).onPress(onpress);
} }
@ -66,7 +65,7 @@ class _ASoundPlayerState extends State<ASoundPlayer> {
rebuild(); rebuild();
}); });
case PlayerState.stopped: 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; _failedToLoad = false;
try { try {
await _audioPlayer.play( await _audioPlayer.play(
@ -182,7 +181,7 @@ 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: AppColor.primary70, activeColor: context.isDark ? AppColor.primary40 : AppColor.primary70,
inactiveColor: AppColor.neutral30, inactiveColor: AppColor.neutral30,
onChangeStart: (value) { onChangeStart: (value) {
_sliderMoving = true; _sliderMoving = true;

Loading…
Cancel
Save