import 'package:car_customer_app/view_models/requests_view_model.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.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/models/generic_resp_model.dart'; import 'package:mc_common_app/models/widgets_models.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/views/advertisement/ad_creation_steps/ad_creation_steps_containers.dart'; import 'package:mc_common_app/views/advertisement/picked_images_container.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/dotted_rect.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:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; class CreateRequestPage extends StatelessWidget { @override Widget build(BuildContext context) { // context.read().getVehicleTypes(); context.read().getRequestTypes(); return Scaffold( appBar: CustomAppBar( title: "Create Request", ), body: Consumer(builder: (context, model, widget) { return Column( children: [ Expanded( child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ "Vehicle Detail".toText(fontSize: 18, isBold: true), 8.height, if (model.isFetchingRequestType) ...[ Center( child: CircularProgressIndicator(), ), ] else ...[ Builder(builder: (context) { List requestTypeDrop = []; for (var element in model.requestTypes) { requestTypeDrop.add(DropValue(element.enumValue.toInt() ?? 0, element.enumValueStr ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionRequestTypeId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: requestTypeDrop, dropdownValue: model.requestTypeId.selectedId != -1 ? DropValue(model.requestTypeId.selectedId, model.requestTypeId.selectedOption, "") : null, hint: "Request Type", errorValue: model.requestTypeId.errorValue, ); }), ], 8.height, if (model.requestTypeId.selectedId != -1) if (model.isFetchingVehicleType) ...[ Center( child: CircularProgressIndicator(), ), ] else ...[ Builder(builder: (context) { List vehicleTypeDrop = []; for (var element in model.vehicleTypes) { vehicleTypeDrop.add(DropValue(element.id?.toInt() ?? 0, element.vehicleTypeName ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionVehicleTypeId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleTypeDrop, dropdownValue: model.vehicleTypeId.selectedId != -1 ? DropValue(model.vehicleTypeId.selectedId, model.vehicleTypeId.selectedOption, "") : null, hint: "Vehicle Type", errorValue: model.vehicleTypeId.errorValue, ); }), ], 8.height, if (model.vehicleTypeId.selectedId != -1) if (model.isFetchingVehicleDetail) ...[ Center( child: CircularProgressIndicator(), ), ] else ...[ Column( children: [ Builder(builder: (context) { List vehicleBrandsDrop = []; for (var element in model.vehicleBrands) { vehicleBrandsDrop.add(DropValue(element.id?.toInt() ?? 0, element.vehicleBrandDescription ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionVehicleBrandId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleBrandsDrop, dropdownValue: model.vehicleBrandId.selectedId != -1 ? DropValue(model.vehicleBrandId.selectedId, model.vehicleBrandId.selectedOption, "") : null, hint: "Brand", errorValue: model.vehicleBrandId.errorValue, ); }), 8.height, Builder(builder: (context) { List vehicleModelsDrop = []; for (var element in model.vehicleModels) { if (model.vehicleBrandId.selectedId == element.vehicleBrandID) vehicleModelsDrop.add(DropValue(element.id?.toInt() ?? 0, element.model ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionVehicleModelId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleModelsDrop, dropdownValue: model.vehicleModelId.selectedId != -1 ? DropValue(model.vehicleModelId.selectedId, model.vehicleModelId.selectedOption, "") : null, hint: "Model", errorValue: model.vehicleModelId.errorValue, ); }), 8.height, Builder(builder: (context) { List vehicleYearModelsDrop = []; for (var element in model.vehicleModelYears) { vehicleYearModelsDrop.add(DropValue(element.id?.toInt() ?? 0, element.modelYear ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionVehicleModelYearId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleYearModelsDrop, dropdownValue: model.vehicleModelYearId.selectedId != -1 ? DropValue(model.vehicleModelYearId.selectedId, model.vehicleModelYearId.selectedOption, "") : null, hint: "Year", errorValue: model.vehicleModelYearId.errorValue, ); }), 8.height, Builder(builder: (context) { List vehicleCountriesDrop = []; for (var element in model.vehicleCountries) { vehicleCountriesDrop.add(DropValue(element.id?.toInt() ?? 0, element.countryName ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionVehicleCountryId(SelectionModel(selectedOption: value.value, selectedId: value.id)), list: vehicleCountriesDrop, dropdownValue: model.vehicleCountryId.selectedId != -1 ? DropValue(model.vehicleCountryId.selectedId, model.vehicleCountryId.selectedOption, "") : null, hint: "Country", errorValue: model.vehicleCountryId.errorValue, ); }), if (model.vehicleCountryId.selectedId != -1) ...[ if (model.isCountryFetching) ...[ Row( mainAxisAlignment: MainAxisAlignment.center, children: [const CircularProgressIndicator().paddingAll(10)], ), ] else ...[ 8.height, Builder(builder: (context) { List vehicleCitiesDrop = []; for (var element in model.vehicleCities) { vehicleCitiesDrop.add(DropValue(element.id?.toInt() ?? 0, element.cityName ?? "", "")); } return DropdownField( (DropValue value) => model.updateSelectionVehicleCityId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleCitiesDrop, dropdownValue: model.vehicleCityId.selectedId != -1 ? DropValue(model.vehicleCityId.selectedId, model.vehicleCityId.selectedOption, "") : null, hint: "City", errorValue: model.vehicleCityId.errorValue, ); }), ], ], 8.height, TxtField( hint: "Price", value: model.price, onChanged: (e) => model.updatePrice(e), ), 8.height, TxtField( hint: "Description", maxLines: 5, value: model.description, onChanged: (e) => model.updateDescription(e), ), 8.height, DottedRectContainer( onTap: () => context.read().pickMultipleImages(), text: "Attach Image", icon: MyAssets.attachmentIcon.buildSvg(), ), if (model.vehicleImageError != "") ...[ 10.height, Row( mainAxisAlignment: MainAxisAlignment.end, children: [ model.vehicleImageError.toText(fontSize: 14, color: Colors.red), ], ).paddingOnly(right: 10) ], if (model.pickedVehicleImages.isNotEmpty) ...[ 16.height, PickedImagesContainer( pickedImages: model.pickedVehicleImages, onCrossPressedPrimary: model.removeImageFromList, onAddImagePressed: () { context.read().pickMultipleImages(); }, ), ], 16.height, Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Checkbox( value: model.isShippingDeliveryEnabled, onChanged: null, ), "Shipping/Delivery".toText(color: MyColors.darkPrimaryColor, isBold: true, fontSize: 18) ], ).onPress(() { model.updateShippingDeliverEnabled(!model.isShippingDeliveryEnabled); }), ], ), ] ], ).toContainer(isShadowEnabled: true, marginAll: 16, paddingAll: 12), ), ), ShowFillButton( title: "Create Request", maxWidth: double.infinity, margin: EdgeInsets.all(16), onPressed: () async { Utils.showLoading(context); GenericRespModel? response = await model.createRequest(); Utils.hideLoading(context); if (response != null) { if (response.messageStatus == 1) { Utils.showToast("Request Successfully Created"); } else { Utils.showToast(response.message.toString()); } } }, ) ], ); }), ); } }