From cb658f0e60b1a59eb059cd5e97998b7738db1ce0 Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Thu, 16 Nov 2023 10:24:37 +0300 Subject: [PATCH] Enhancements on search and filter reset button --- .../device_transfer/asset_filter_screen.dart | 81 ++++++------ .../device_transfer/asset_search_screen.dart | 117 ++++++++++++++++-- 2 files changed, 152 insertions(+), 46 deletions(-) diff --git a/lib/views/pages/device_transfer/asset_filter_screen.dart b/lib/views/pages/device_transfer/asset_filter_screen.dart index 50939645..98c6961b 100644 --- a/lib/views/pages/device_transfer/asset_filter_screen.dart +++ b/lib/views/pages/device_transfer/asset_filter_screen.dart @@ -14,8 +14,8 @@ import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import '../../../models/device/asset_search.dart'; -import '../../../new_views/app_style/app_color.dart'; import '../../../new_views/common_widgets/app_lazy_loading.dart'; +import '../../../new_views/common_widgets/default_app_bar.dart'; import '../../widgets/equipment/equipment_status_buttons.dart'; class AssetFilterScreen extends StatefulWidget { @@ -32,7 +32,8 @@ class _AssetFilterScreenState extends State { AssetSearch filter; Site _site; Department _department; - int initialvalue; + String startDate, endDate; + int initialValue; @override void initState() { @@ -43,36 +44,26 @@ class _AssetFilterScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - titleSpacing: 16, - title: Row( - children: [ - const Icon(Icons.arrow_back_ios).onPress(() { - Navigator.of(context).pop(); - }), - Text( - context.translation.filter, - style: AppTextStyles.heading3?.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ).expanded, - ], - ), + appBar: DefaultAppBar( + title: context.translation.filter, actions: [ - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - context.translation.reset, - style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), - ).paddingAll(8).onPress(() { - setState(() { - _department = null; - _site = null; - initialvalue = null; - }); - }), - ], - ) + if (_showResetButton()) + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + context.translation.reset, + style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), + ).paddingAll(8).onPress(() { + setState(() { + startDate = null; + endDate = null; + _department = null; + _site = null; + }); + }), + ], + ) ], ), body: Column( @@ -88,7 +79,7 @@ class _AssetFilterScreenState extends State { /// the selected value is [All Assets] } }, - initialvalue: initialvalue, + initialvalue: initialValue, ), 16.height, SingleItemDropDownMenu( @@ -111,18 +102,28 @@ class _AssetFilterScreenState extends State { 16.height, context.translation.pmDateRange.heading5(context).paddingOnly(start: 16, end: 16), 8.height, - - /// todo : TBD Row( children: [ ADatePicker( - label: context.translation.from, - onDatePicker: (date) {}, + label: context.translation.to, + from: DateTime(2000), + date: DateTime.tryParse(startDate ?? ""), + onDatePicker: (date) { + setState(() { + startDate = date?.toIso8601String(); + }); + }, ).expanded, 8.width, ADatePicker( label: context.translation.to, - onDatePicker: (date) {}, + from: DateTime(2000), + date: DateTime.tryParse(endDate ?? ""), + onDatePicker: (date) { + setState(() { + endDate = date?.toIso8601String(); + }); + }, ).expanded, ], ).paddingOnly(start: 16, end: 16), @@ -138,6 +139,8 @@ class _AssetFilterScreenState extends State { void _search() async { filter.site = _site?.name; filter.department = _department?.departmentName; + filter.supplyDateFrom = startDate; + filter.supplyDateTo = endDate; final deviceProvider = Provider.of(context, listen: false); deviceProvider.reset(); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); @@ -145,4 +148,8 @@ class _AssetFilterScreenState extends State { Navigator.pop(context); Navigator.of(context).pop(filter); } + + bool _showResetButton() { + return (_department != null) || (_site != null) || (startDate != null) || (endDate != null); + } } diff --git a/lib/views/pages/device_transfer/asset_search_screen.dart b/lib/views/pages/device_transfer/asset_search_screen.dart index 547d53e0..98fe81cb 100644 --- a/lib/views/pages/device_transfer/asset_search_screen.dart +++ b/lib/views/pages/device_transfer/asset_search_screen.dart @@ -25,17 +25,65 @@ class AssetSearchScreen extends StatefulWidget { class _AssetSearchScreenState extends State { AssetSearch search; final GlobalKey _formKey = GlobalKey(); + TextEditingController _assetNameController, _assetNumberController, _snController, _modelController, _supplierController, _siteController, _manufactureController, _mdController; @override void initState() { search = widget.data ?? AssetSearch(); + _assetNameController = TextEditingController(text: search.assetName); + _assetNumberController = TextEditingController(text: search.assetNo); + _snController = TextEditingController(text: search.assetSerialNumber); + _modelController = TextEditingController(text: search.model); + _supplierController = TextEditingController(text: search.supplier); + _siteController = TextEditingController(text: search.site); + _manufactureController = TextEditingController(text: search.manufacturer); + _mdController = TextEditingController(text: search.modelDefinition); super.initState(); } + @override + void dispose() { + _assetNameController?.dispose(); + _assetNumberController?.dispose(); + _snController?.dispose(); + _modelController?.dispose(); + _supplierController?.dispose(); + _siteController?.dispose(); + _siteController?.dispose(); + _manufactureController?.dispose(); + _mdController?.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return Scaffold( - appBar: DefaultAppBar(title: context.translation.search), + appBar: DefaultAppBar( + title: context.translation.search, + actions: [ + if (_showResetButton()) + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + context.translation.reset, + style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), + ).paddingAll(8).onPress(() { + setState(() { + _assetNameController.text = ""; + _assetNumberController.text = ""; + _snController.text = ""; + _modelController.text = ""; + _supplierController.text = ""; + _siteController.text = ""; + _manufactureController.text = ""; + _mdController.text = ""; + }); + }), + ], + ) + ], + ), body: Form( key: _formKey, child: Column( @@ -49,16 +97,26 @@ class _AssetSearchScreenState extends State { context.translation.searchByDesc.bodyText(context), 16.height, AppTextFormField( + controller: _assetNameController, labelText: context.translation.assetName, - initialValue: search.assetName, + onChange: (text) { + _assetNameController.text = text; + _assetNameController.selection = TextSelection.fromPosition(TextPosition(offset: _assetNameController.text.length)); + setState(() {}); + }, onSaved: (value) { search.assetName = value; }, ), 8.height, AppTextFormField( + controller: _assetNumberController, labelText: context.translation.assetNumber, - initialValue: search.assetNo, + onChange: (text) { + _assetNumberController.text = text; + _assetNumberController.selection = TextSelection.fromPosition(TextPosition(offset: _assetNumberController.text.length)); + setState(() {}); + }, onSaved: (value) { search.assetNo = value; }, @@ -72,48 +130,78 @@ class _AssetSearchScreenState extends State { ), 8.height, AppTextFormField( + controller: _snController, labelText: context.translation.snNumber, - initialValue: search.assetSerialNumber, + onChange: (text) { + _snController.text = text; + _snController.selection = TextSelection.fromPosition(TextPosition(offset: _snController.text.length)); + setState(() {}); + }, onSaved: (value) { search.assetSerialNumber = value; }, ), 8.height, AppTextFormField( + controller: _modelController, labelText: context.translation.model, - initialValue: search.model, + onChange: (text) { + _modelController.text = text; + _modelController.selection = TextSelection.fromPosition(TextPosition(offset: _modelController.text.length)); + setState(() {}); + }, onSaved: (value) { search.model = value; }, ), 8.height, AppTextFormField( + controller: _supplierController, labelText: context.translation.supplier, - initialValue: search.supplier, + onChange: (text) { + _supplierController.text = text; + _supplierController.selection = TextSelection.fromPosition(TextPosition(offset: _supplierController.text.length)); + setState(() {}); + }, onSaved: (value) { search.supplier = value; }, ), 8.height, AppTextFormField( + controller: _siteController, labelText: context.translation.site, - initialValue: search.site, + onChange: (text) { + _siteController.text = text; + _siteController.selection = TextSelection.fromPosition(TextPosition(offset: _siteController.text.length)); + setState(() {}); + }, onSaved: (value) { search.site = value; }, ), 8.height, AppTextFormField( + controller: _manufactureController, labelText: context.translation.manufacture, - initialValue: search.manufacturer, + onChange: (text) { + _manufactureController.text = text; + _manufactureController.selection = TextSelection.fromPosition(TextPosition(offset: _manufactureController.text.length)); + setState(() {}); + }, onSaved: (value) { search.manufacturer = value; }, ), 8.height, AppTextFormField( + controller: _mdController, labelText: context.translation.md, - initialValue: search.modelDefinition, + onChange: (text) { + _mdController.text = text; + _mdController.selection = TextSelection.fromPosition(TextPosition(offset: _mdController.text.length)); + setState(() {}); + }, onSaved: (value) { search.modelDefinition = value; }, @@ -147,4 +235,15 @@ class _AssetSearchScreenState extends State { Navigator.of(context).pop(search); } } + + bool _showResetButton() { + return (_assetNameController?.text?.isNotEmpty ?? false) || + (_assetNumberController?.text?.isNotEmpty ?? false) || + (_snController?.text?.isNotEmpty ?? false) || + (_modelController?.text?.isNotEmpty ?? false) || + (_supplierController?.text?.isNotEmpty ?? false) || + (_siteController?.text?.isNotEmpty ?? false) || + (_manufactureController?.text?.isNotEmpty ?? false) || + (_mdController?.text?.isNotEmpty ?? false); + } }