diff --git a/lib/models/search_all_requests_model.dart b/lib/models/search_all_requests_model.dart index e9b8597c..23cb806d 100644 --- a/lib/models/search_all_requests_model.dart +++ b/lib/models/search_all_requests_model.dart @@ -32,30 +32,31 @@ abstract class SearchAllRequestsBaseModel { String value; BuildContext context; TextInputType inputType; + TextEditingController controller; - SearchAllRequestsBaseModel(this.context, {this.label, this.value, this.inputType = TextInputType.text}); + SearchAllRequestsBaseModel(this.context, {this.controller, this.label, this.value, this.inputType = TextInputType.text}); } class SearchByRequestNumberModel extends SearchAllRequestsBaseModel { - SearchByRequestNumberModel(BuildContext context, {String value}) : super(context, label: "${context.translation.requestNo}.", value: value); + SearchByRequestNumberModel(BuildContext context, {TextEditingController controller, String value}) : super(context, controller: controller, label: "${context.translation.requestNo}.", value: value); } class SearchByAssetNameModel extends SearchAllRequestsBaseModel { - SearchByAssetNameModel(BuildContext context, {String value}) : super(context, label: context.translation.assetName, value: value); + SearchByAssetNameModel(BuildContext context, {TextEditingController controller, String value}) : super(context, controller: controller, label: context.translation.assetName, value: value); } class SearchByAssetNoModel extends SearchAllRequestsBaseModel { - SearchByAssetNoModel(BuildContext context, {String value}) : super(context, label: context.translation.assetNo, value: value); + SearchByAssetNoModel(BuildContext context, {TextEditingController controller, String value}) : super(context, controller: controller, label: context.translation.assetNo, value: value); } class SearchByManufactureModel extends SearchAllRequestsBaseModel { - SearchByManufactureModel(BuildContext context, {String value}) : super(context, label: context.translation.manufacture, value: value); + SearchByManufactureModel(BuildContext context, {TextEditingController controller, String value}) : super(context, controller: controller, label: context.translation.manufacture, value: value); } class SearchBySNModel extends SearchAllRequestsBaseModel { - SearchBySNModel(BuildContext context, {String value}) : super(context, label: context.translation.sn, value: value); + SearchBySNModel(BuildContext context, {TextEditingController controller, String value}) : super(context, controller: controller, label: context.translation.sn, value: value); } class SearchByRequestModel extends SearchAllRequestsBaseModel { - SearchByRequestModel(BuildContext context, {String value}) : super(context, label: context.translation.model, value: value); + SearchByRequestModel(BuildContext context, {TextEditingController controller, String value}) : super(context, controller: controller, label: context.translation.model, value: value); } diff --git a/lib/new_views/common_widgets/default_app_bar.dart b/lib/new_views/common_widgets/default_app_bar.dart index 2f524003..e34be09d 100644 --- a/lib/new_views/common_widgets/default_app_bar.dart +++ b/lib/new_views/common_widgets/default_app_bar.dart @@ -8,8 +8,9 @@ import '../app_style/app_color.dart'; class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { final String title; + final List actions; - const DefaultAppBar({this.title, Key key}) : super(key: key); + const DefaultAppBar({this.title, this.actions, Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -27,6 +28,7 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { ).expanded, ], ), + actions: actions, ); } diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index b1701f6f..7f1846ce 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -6,11 +6,11 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/search_all_requests_model.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/pages/land_page/widgets/static_filter_buttons.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import '../../../../controllers/providers/api/all_requests_provider.dart'; -import '../../../app_style/app_color.dart'; import '../../../common_widgets/app_lazy_loading.dart'; class AllRequestsFilterPage extends StatefulWidget { @@ -29,11 +29,30 @@ class _AllRequestsFilterPageState extends State { @override void initState() { search = widget.data; + if (search != null) { + search.requestNumber.controller.text = search.requestNumber.value; + search.assetName.controller.text = search.assetName.value; + search.assetNo.controller.text = search.assetNo.value; + search.manufacture.controller.text = search.manufacture.value; + search.sn.controller.text = search.sn.value; + search.model.controller.text = search.model.value; + } super.initState(); } @override Widget build(BuildContext context) { + if (search == null) { + search = SearchAllRequestsModel( + requestNumber: SearchByRequestNumberModel(context, controller: TextEditingController()), + assetName: SearchByAssetNameModel(context, controller: TextEditingController()), + assetNo: SearchByAssetNoModel(context, controller: TextEditingController()), + manufacture: SearchByManufactureModel(context, controller: TextEditingController()), + sn: SearchBySNModel(context, controller: TextEditingController()), + model: SearchByRequestModel(context, controller: TextEditingController()), + ); + search.searchBySelectedValue = search.requestNumber; + } final types = { context.translation.serviceRequest: 1, context.translation.preventiveMaintenance: 4, @@ -46,49 +65,27 @@ class _AllRequestsFilterPageState extends State { context.translation.completed: 4, context.translation.closed: 3, }; - if (search == null) { - search = SearchAllRequestsModel( - requestNumber: SearchByRequestNumberModel(context), - assetName: SearchByAssetNameModel(context), - assetNo: SearchByAssetNoModel(context), - manufacture: SearchByManufactureModel(context), - sn: SearchBySNModel(context), - model: SearchByRequestModel(context), - ); - search.searchBySelectedValue = search.requestNumber; - } 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(() { - search.statuses.clear(); - search.typeTransaction.clear(); - search.startDate = null; - search.endDate = null; - }); - }), - ], - ) + if (_showResetButton()) + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + context.translation.reset, + style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), + ).paddingAll(8).onPress(() { + setState(() { + search.statuses?.clear(); + search.typeTransaction?.clear(); + search.startDate = null; + search.endDate = null; + }); + }), + ], + ) ], ), body: Column( @@ -104,16 +101,13 @@ class _AllRequestsFilterPageState extends State { items: statuses, onSelect: (value) { if (value.isNotEmpty && value.last == 0) { - setState(() { - search.statuses = [0]; - }); + search.statuses = [0]; } else if (value.contains(0)) { - setState(() { - search.statuses.remove(0); - }); + search.statuses.remove(0); } else { search.statuses = value; } + setState(() {}); }, ), 16.height, @@ -124,6 +118,7 @@ class _AllRequestsFilterPageState extends State { items: types, onSelect: (value) { search.typeTransaction = value; + setState(() {}); }, ), 16.height, @@ -171,4 +166,8 @@ class _AllRequestsFilterPageState extends State { Navigator.pop(context); Navigator.of(context).pop(search); } + + bool _showResetButton() { + return (search.statuses?.isNotEmpty ?? false) || (search.typeTransaction?.isNotEmpty ?? false) || (search.startDate != null) || (search.endDate != null); + } } diff --git a/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart index 1add10b4..af995733 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart @@ -30,6 +30,14 @@ class _AllRequestsSearchPageState extends State { @override void initState() { search = widget.data; + if (search != null) { + search.requestNumber.controller.text = search.requestNumber.value; + search.assetName.controller.text = search.assetName.value; + search.assetNo.controller.text = search.assetNo.value; + search.manufacture.controller.text = search.manufacture.value; + search.sn.controller.text = search.sn.value; + search.model.controller.text = search.model.value; + } super.initState(); } @@ -37,18 +45,41 @@ class _AllRequestsSearchPageState extends State { Widget build(BuildContext context) { if (search == null) { search = SearchAllRequestsModel( - requestNumber: SearchByRequestNumberModel(context), - assetName: SearchByAssetNameModel(context), - assetNo: SearchByAssetNoModel(context), - manufacture: SearchByManufactureModel(context), - sn: SearchBySNModel(context), - model: SearchByRequestModel(context), + requestNumber: SearchByRequestNumberModel(context, controller: TextEditingController()), + assetName: SearchByAssetNameModel(context, controller: TextEditingController()), + assetNo: SearchByAssetNoModel(context, controller: TextEditingController()), + manufacture: SearchByManufactureModel(context, controller: TextEditingController()), + sn: SearchBySNModel(context, controller: TextEditingController()), + model: SearchByRequestModel(context, controller: TextEditingController()), ); search.searchBySelectedValue = search.requestNumber; } 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(() { + search.requestNumber?.controller?.text = ""; + search.assetName?.controller?.text = ""; + search.assetNo?.controller?.text = ""; + search.manufacture?.controller?.text = ""; + search.sn?.controller?.text = ""; + search.model?.controller?.text = ""; + }); + }), + ], + ) + ], + ), body: Form( key: _formKey, child: Column( @@ -71,9 +102,14 @@ class _AllRequestsSearchPageState extends State { ), 16.height, AppTextFormField( - controller: TextEditingController(text: search.searchBySelectedValue.value), + controller: search.searchBySelectedValue.controller, labelText: search.searchBySelectedValue.label, textInputType: search.searchBySelectedValue.inputType, + onChange: (text) { + search.searchBySelectedValue.controller.text = text; + search.searchBySelectedValue.controller.selection = TextSelection.fromPosition(TextPosition(offset: search.searchBySelectedValue.controller.text.length)); + setState(() {}); + }, onSaved: (value) { search.searchBySelectedValue.value = value; }, @@ -98,4 +134,13 @@ class _AllRequestsSearchPageState extends State { Navigator.of(context).pop(search); } } + + bool _showResetButton() { + return (search.requestNumber?.controller?.text?.isNotEmpty ?? false) || + (search.assetName?.controller?.text?.isNotEmpty ?? false) || + (search.assetNo?.controller?.text?.isNotEmpty ?? false) || + (search.manufacture?.controller?.text?.isNotEmpty ?? false) || + (search.sn?.controller?.text?.isNotEmpty ?? false) || + (search.model?.controller?.text?.isNotEmpty ?? false); + } } diff --git a/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart b/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart index 9bc0aaf3..0ecde311 100644 --- a/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart +++ b/lib/new_views/pages/land_page/widgets/static_filter_buttons.dart @@ -29,7 +29,7 @@ class _RequestsTypeFilterState extends State { @override void didUpdateWidget(covariant RequestsTypeFilter oldWidget) { - if (widget.initialValues != oldWidget.initialValues) { + if ((widget.initialValues?.isEmpty ?? true) || widget.initialValues != oldWidget.initialValues) { setState(() { _selected = widget.initialValues ?? []; });