Enhancements on search and filter reset button

main_design2.0
zaid_daoud 2 years ago
parent 51ef873770
commit 27fec0183f

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

@ -8,8 +8,9 @@ import '../app_style/app_color.dart';
class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
final String title;
final List<Widget> 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,
);
}

@ -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<AllRequestsFilterPage> {
@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<AllRequestsFilterPage> {
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<AllRequestsFilterPage> {
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<AllRequestsFilterPage> {
items: types,
onSelect: (value) {
search.typeTransaction = value;
setState(() {});
},
),
16.height,
@ -171,4 +166,8 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
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);
}
}

@ -30,6 +30,14 @@ class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> {
@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<AllRequestsSearchPage> {
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<AllRequestsSearchPage> {
),
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<AllRequestsSearchPage> {
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);
}
}

@ -29,7 +29,7 @@ class _RequestsTypeFilterState extends State<RequestsTypeFilter> {
@override
void didUpdateWidget(covariant RequestsTypeFilter oldWidget) {
if (widget.initialValues != oldWidget.initialValues) {
if ((widget.initialValues?.isEmpty ?? true) || widget.initialValues != oldWidget.initialValues) {
setState(() {
_selected = widget.initialValues ?? [];
});

Loading…
Cancel
Save