Fixed the notes list
parent
15577c3cfb
commit
f0a9c294c2
@ -0,0 +1,272 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
import 'dart:developer';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:mc_common_app/classes/consts.dart';
|
||||||
|
import 'package:mc_common_app/extensions/int_extensions.dart';
|
||||||
|
import 'package:mc_common_app/extensions/string_extensions.dart';
|
||||||
|
import 'package:mc_common_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mc_common_app/main.dart';
|
||||||
|
import 'package:mc_common_app/models/general_models/widgets_models.dart';
|
||||||
|
import 'package:mc_common_app/theme/colors.dart';
|
||||||
|
import 'package:mc_common_app/utils/enums.dart';
|
||||||
|
import 'package:mc_common_app/utils/utils.dart';
|
||||||
|
import 'package:mc_common_app/view_models/requests_view_model.dart';
|
||||||
|
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
|
||||||
|
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
|
||||||
|
import 'package:mc_common_app/widgets/common_widgets/search_entity_widget.dart';
|
||||||
|
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
|
||||||
|
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
||||||
|
import 'package:mc_common_app/widgets/txt_field.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
|
||||||
|
class RequestsFilterView extends StatefulWidget {
|
||||||
|
const RequestsFilterView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<RequestsFilterView> createState() => _RequestsFilterViewState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _RequestsFilterViewState extends State<RequestsFilterView> {
|
||||||
|
late RequestsVM requestsVM;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
requestsVM = context.read<RequestsVM>();
|
||||||
|
scheduleMicrotask(() async {
|
||||||
|
await requestsVM.populateDataForRequestsFilter();
|
||||||
|
});
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: CustomAppBar(
|
||||||
|
title: LocaleKeys.requestsFilter.tr(),
|
||||||
|
profileImageUrl: MyAssets.bnCar,
|
||||||
|
isRemoveBackButton: false,
|
||||||
|
isDrawerEnabled: false,
|
||||||
|
onBackButtonTapped: () {
|
||||||
|
// context.read<RequestsVM>().resetValues();
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
body: Consumer<RequestsVM>(
|
||||||
|
builder: (BuildContext context, RequestsVM requestVM, Widget? child) {
|
||||||
|
if (requestVM.state == ViewState.busy) {
|
||||||
|
return const Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return WillPopScope(
|
||||||
|
onWillPop: () async {
|
||||||
|
requestVM.clearRequestFilterSelections();
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
ListView(
|
||||||
|
children: [
|
||||||
|
20.height,
|
||||||
|
// SearchEntityWidget(
|
||||||
|
// title: LocaleKeys.searchByRequestType.tr(),
|
||||||
|
// actionWidget: Builder(builder: (context) {
|
||||||
|
// List<DropValue> requestTypeDrop = [];
|
||||||
|
// for (var element in requestsVM.myRequestsTypeEnum) {
|
||||||
|
// requestTypeDrop.add(DropValue(element.id.toInt(), element.enumValueStr, ""));
|
||||||
|
// }
|
||||||
|
// return DropdownField(
|
||||||
|
// (DropValue value) => requestsVM.updateSelectionRequestTypeId(SelectionModel(selectedId: value.id, selectedOption: value.value), shouldCallVehicleTypes: false, isForSearch: true),
|
||||||
|
// list: requestTypeDrop,
|
||||||
|
// dropdownValue: requestsVM.requestTypeId.selectedId != -1 ? DropValue(requestsVM.requestTypeId.selectedId, requestsVM.requestTypeId.selectedOption, "") : null,
|
||||||
|
// hint: LocaleKeys.selectRequestType.tr(),
|
||||||
|
// errorValue: requestsVM.requestTypeId.errorValue,
|
||||||
|
// );
|
||||||
|
// }),
|
||||||
|
// historyContent: const [],
|
||||||
|
// // This is commented out because in the document it is only single value search not with the list value search. May be we can do that in future
|
||||||
|
// onHistoryItemDeleted: (index) => requestVM.removeRequestTypeSearchHistory(index: index),
|
||||||
|
// onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
// ),
|
||||||
|
// const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByRequestStatus.tr(),
|
||||||
|
actionWidget: Builder(builder: (context) {
|
||||||
|
List<DropValue> requestTypeDrop = [];
|
||||||
|
for (var element in requestsVM.requestStatusesEnum) {
|
||||||
|
requestTypeDrop.add(DropValue(element.enumValue.toInt(), element.enumValueStr, ""));
|
||||||
|
}
|
||||||
|
return DropdownField(
|
||||||
|
(DropValue value) => requestsVM.updateRequestStatusId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
||||||
|
list: requestTypeDrop,
|
||||||
|
dropdownValue: requestsVM.requestStatusId.selectedId != -1 ? DropValue(requestsVM.requestStatusId.selectedId, requestsVM.requestStatusId.selectedOption, "") : null,
|
||||||
|
hint: LocaleKeys.selectRequestStatus.tr(),
|
||||||
|
errorValue: requestsVM.requestStatusId.errorValue,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeRequestStatusesSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByCity.tr(),
|
||||||
|
actionWidget: Builder(builder: (context) {
|
||||||
|
List<DropValue> vehicleBrandsDrop = [];
|
||||||
|
for (var element in requestVM.vehicleCities) {
|
||||||
|
vehicleBrandsDrop.add(DropValue(element.id?.toInt() ?? 0, element.cityName ?? "", ""));
|
||||||
|
}
|
||||||
|
return DropdownField(
|
||||||
|
(DropValue value) => requestVM.updateSelectionVehicleCityId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
||||||
|
list: vehicleBrandsDrop,
|
||||||
|
dropdownValue: requestVM.vehicleCityId.selectedId != -1 ? DropValue(requestVM.vehicleCityId.selectedId, requestVM.vehicleCityId.selectedOption, "") : null,
|
||||||
|
hint: LocaleKeys.selectCity.tr(),
|
||||||
|
errorValue: requestVM.vehicleCityId.errorValue,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeVehicleLocationAdSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByBrandName.tr(),
|
||||||
|
actionWidget: TxtField(
|
||||||
|
hint: LocaleKeys.brand.tr(),
|
||||||
|
value: requestsVM.brandForSearch,
|
||||||
|
onChanged: (e) => requestsVM.updateBrandForSearch(e),
|
||||||
|
),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeVehicleBrandsAdSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByVehicleModel.tr(),
|
||||||
|
actionWidget: TxtField(
|
||||||
|
hint: LocaleKeys.model.tr(),
|
||||||
|
value: requestsVM.modelForSearch,
|
||||||
|
onChanged: (e) => requestsVM.updateModelForSearch(e),
|
||||||
|
),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeVehicleBrandsAdSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByVehicleYear.tr(),
|
||||||
|
actionWidget: Builder(
|
||||||
|
builder: (context) {
|
||||||
|
List<DropValue> vehicleBrandsDrop = [];
|
||||||
|
for (var element in requestVM.vehicleYears) {
|
||||||
|
vehicleBrandsDrop.add(DropValue(element.id?.toInt() ?? 0, element.modelYear ?? "", ""));
|
||||||
|
}
|
||||||
|
return DropdownField(
|
||||||
|
(DropValue value) => requestVM.updateSelectionVehicleYearId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
||||||
|
list: vehicleBrandsDrop,
|
||||||
|
dropdownValue: requestVM.vehicleYearId.selectedId != -1 ? DropValue(requestVM.vehicleYearId.selectedId, requestVM.vehicleYearId.selectedOption, "") : null,
|
||||||
|
hint: LocaleKeys.selectYear.tr(),
|
||||||
|
errorValue: requestVM.vehicleYearId.errorValue,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeVehicleYearAdSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByRequestedDate.tr(),
|
||||||
|
actionWidget: TxtField(
|
||||||
|
isBackgroundEnabled: true,
|
||||||
|
isNeedBorder: true,
|
||||||
|
hint: LocaleKeys.selectDate.tr(),
|
||||||
|
value: requestVM.requestedDateFilter,
|
||||||
|
isNeedClickAll: true,
|
||||||
|
postFixDataColor: MyColors.darkTextColor,
|
||||||
|
onTap: () async {
|
||||||
|
final formattedDate = await Utils.pickDateFromDatePicker(context, lastDate: DateTime.now(), firstDate: DateTime(2020));
|
||||||
|
requestsVM.updateRequestedDate(formattedDate);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeVehicleConditionSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
const Divider(thickness: 1.2).paddingOnly(top: 7, bottom: 7),
|
||||||
|
SearchEntityWidget(
|
||||||
|
title: LocaleKeys.searchByCondition.tr(),
|
||||||
|
actionWidget: Builder(
|
||||||
|
builder: (context) {
|
||||||
|
List<DropValue> vehicleOwnerDrop = [];
|
||||||
|
for (var element in requestVM.vehicleConditionsEnum) {
|
||||||
|
vehicleOwnerDrop.add(DropValue(element.id.toInt(), element.enumValueStr, ""));
|
||||||
|
}
|
||||||
|
return DropdownField(
|
||||||
|
(DropValue value) => requestVM.updateSelectionVehicleConditionId(SelectionModel(selectedId: value.id, selectedOption: value.value), isForSearch: true),
|
||||||
|
list: vehicleOwnerDrop,
|
||||||
|
dropdownValue: requestVM.vehicleConditionId.selectedId != -1 ? DropValue(requestVM.vehicleConditionId.selectedId, requestVM.vehicleConditionId.selectedOption, "") : null,
|
||||||
|
hint: LocaleKeys.selectCondition.tr(),
|
||||||
|
errorValue: requestVM.vehicleConditionId.errorValue,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
historyContent: const [],
|
||||||
|
onHistoryItemDeleted: (index) => requestVM.removeVehicleConditionSearchHistory(index: index),
|
||||||
|
onHistoryItemTapped: (DropValue value) => null,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).expand(),
|
||||||
|
Container(
|
||||||
|
color: MyColors.white,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
5.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: ShowFillButton(
|
||||||
|
maxHeight: 55,
|
||||||
|
title: LocaleKeys.search.tr(),
|
||||||
|
onPressed: () async {
|
||||||
|
bool status = await requestVM.getRequestsBasedOnFilters();
|
||||||
|
if (status) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
backgroundColor: MyColors.darkPrimaryColor,
|
||||||
|
txtColor: MyColors.white,
|
||||||
|
fontSize: 18,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
requestsVM.clearRequestsFilters();
|
||||||
|
},
|
||||||
|
child: LocaleKeys.clearFilters.tr().toText(
|
||||||
|
fontSize: 14,
|
||||||
|
isBold: true,
|
||||||
|
color: MyColors.darkPrimaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
10.height,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).horPaddingMain(),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue