From a79b1656359448e64b293791fe553ec43db28a83 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 30 Jan 2025 09:30:57 -0300 Subject: [PATCH] WIP --- .../vehicle_model.dart | 79 ++++++++++++------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/lib/pages/vehicles_on_the_property/vehicle_model.dart b/lib/pages/vehicles_on_the_property/vehicle_model.dart index 0e225a37..23704747 100644 --- a/lib/pages/vehicles_on_the_property/vehicle_model.dart +++ b/lib/pages/vehicles_on_the_property/vehicle_model.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:hub/components/templates_components/details_component/details_component_widget.dart'; import 'package:hub/features/backend/index.dart'; @@ -7,7 +9,11 @@ import 'package:hub/shared/utils/index.dart'; /// [VehicleModel] is a class that contains the business logic of the vehicle page. class VehicleModel extends FlutterFlowModel - with _BaseVehiclePage, _VehicleHistoryScreenModel, _VehicleRegisterScreenModel, _VehicleUpdateScreenModel { + with + _BaseVehiclePage, + _VehicleHistoryScreenModel, + _VehicleRegisterScreenModel, + _VehicleUpdateScreenModel { /// [VehicleModel] is a singleton class that contains the business logic of the vehicle page. static VehicleModel? _instance = VehicleModel._internal(); VehicleModel._internal(); @@ -31,6 +37,10 @@ class VehicleModel extends FlutterFlowModel textFieldFocusModel = FocusNode(); textFieldControllerModel = TextEditingController(); + + WidgetsBinding.instance.addPostFrameCallback((_) async { + vehicleAmountRegister = 0; + }); } @override @@ -60,11 +70,12 @@ mixin class _BaseVehiclePage { int count = 0; late final VehicleModel model; late final TabController tabBarController; - dynamic item; + // dynamic item; BuildContext context = navigatorKey.currentContext!; bool isEditing = false; String? vehicleId; ApiCallResponse? vehicleResponse; + late final vehicleAmountRegister; VoidCallback? onUpdateVehicle; VoidCallback? onRegisterVehicle; @@ -72,7 +83,8 @@ mixin class _BaseVehiclePage { FocusNode? textFieldFocusLicensePlate; TextEditingController? textFieldControllerLicensePlate; - String? textControllerLicensePlateValidator(BuildContext context, String? value) { + String? textControllerLicensePlateValidator( + BuildContext context, String? value) { if (value == null || value.isEmpty) { return FFLocalizations.of(context).getVariableText( ptText: 'Placa é obrigatória', @@ -85,7 +97,8 @@ mixin class _BaseVehiclePage { // (ABC1D23) final mercosurPlateRegex = RegExp(r'^[A-Z]{3}\d[A-Z]\d{2}$'); - if (!brazilianPlateRegex.hasMatch(value) && !mercosurPlateRegex.hasMatch(value)) { + if (!brazilianPlateRegex.hasMatch(value) && + !mercosurPlateRegex.hasMatch(value)) { return FFLocalizations.of(context).getVariableText( ptText: 'Placa inválida', enText: 'Invalid license plate', @@ -126,9 +139,9 @@ mixin class _BaseVehiclePage { } void clearFields() async { - textFieldControllerLicensePlate!.clear(); - textFieldControllerColor!.clear(); - textFieldControllerModel!.clear(); + textFieldControllerLicensePlate = TextEditingController(text: ''); + textFieldControllerColor = TextEditingController(text: ''); + textFieldControllerModel = TextEditingController(text: ''); } void handleEditingChanged(bool editing) { @@ -136,12 +149,18 @@ mixin class _BaseVehiclePage { clearFields(); } - void setEditForm() { + void setEditForm(dynamic item) { if (item != null) { vehicleId = item['vehicleId']; - textFieldControllerLicensePlate!.text = item['licensePlate']; - textFieldControllerColor!.text = item['color']; - textFieldControllerModel!.text = item['model']; + log("setEditForm "); + log("setEditForm -> ${item.toString()}"); + + textFieldControllerLicensePlate = TextEditingController( + text: item != null ? item['licensePlate'] ?? '' : ''); + textFieldControllerColor = + TextEditingController(text: item != null ? item['color'] ?? '' : ''); + textFieldControllerModel = + TextEditingController(text: item != null ? item['model'] ?? '' : ''); } } } @@ -149,6 +168,9 @@ mixin class _BaseVehiclePage { /// [_VehicleHistoryScreenModel] is a mixin that contains the business logic of the vehicle history page. mixin _VehicleHistoryScreenModel on _BaseVehiclePage { Map? generateStatusColorMap(dynamic uItem) { + final autoApproval = uItem['autoApproval']; + if (autoApproval == true) return null; + final statusMap = { "ATI": { "text": FFLocalizations.of(context).getVariableText( @@ -197,7 +219,8 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { final status = uItem['status']; if (statusMap.containsKey(status)) { return { - statusMap[status]!['text'] as String: statusMap[status]!['color'] as Color, + statusMap[status]!['text'] as String: + statusMap[status]!['color'] as Color, }; } return {}; @@ -220,18 +243,19 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { ), ); - final updateText = FFLocalizations.of(context).getVariableText(ptText: 'Editar', enText: 'Edit'); + final updateText = FFLocalizations.of(context) + .getVariableText(ptText: 'Editar', enText: 'Edit'); final updateIcon = Icon(Icons.edit, color: iconButtonColor); Future updateOnPressed() async { context.pop(); isEditing = true; - item = item; switchTab(1); - setEditForm(); + setEditForm(item); } - final cancelText = FFLocalizations.of(context).getVariableText(ptText: 'Cancelar', enText: 'Cancel'); + final cancelText = FFLocalizations.of(context) + .getVariableText(ptText: 'Cancelar', enText: 'Cancel'); final cancelIcon = Icon(Icons.close, color: iconButtonColor); Future cancelOnPressed() async { showAlertDialog( @@ -244,11 +268,12 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { ptText: 'Você tem certeza que deseja cancelar essa solicitação?', enText: 'Are you sure you want to delete this request?', ), - () async => await processCancelRequest(item['status']), + () async => await processCancelRequest(item['status'], item), ); } - final deleteText = FFLocalizations.of(context).getVariableText(ptText: 'Excluir', enText: 'Delete'); + final deleteText = FFLocalizations.of(context) + .getVariableText(ptText: 'Excluir', enText: 'Delete'); final deleteIcon = Icon(Icons.delete, color: iconButtonColor); Future deleteOnPressed() async { showAlertDialog( @@ -261,7 +286,7 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { ptText: 'Você tem certeza que deseja excluir esse veículo?', enText: 'Are you sure you want to delete this vehicle?', ), - () async => await processDeleteRequest(), + () async => await processDeleteRequest(item), ); } @@ -290,7 +315,7 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { ]; } - Future processDeleteRequest() async { + Future processDeleteRequest(dynamic item) async { int id = item['vehicleId']; await PhpGroup.deleteVehicle.call(vehicleId: id).then((value) { context.pop(value); @@ -330,18 +355,18 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { }); } - Future processCancelRequest(String status) async { + Future processCancelRequest(String status, dynamic item) async { late final ApiCallResponse value; try { switch (status) { case 'APR_CREATE': - value = await processCancelDeleteRequest(); + value = await processCancelDeleteRequest(item); break; case 'AGU_CHANGE': - value = await processCancelUpdateRequest(); + value = await processCancelUpdateRequest(item); break; case 'APR_DELETE': - value = await processCancelCreateRequest(); + value = await processCancelCreateRequest(item); break; default: break; @@ -382,17 +407,17 @@ mixin _VehicleHistoryScreenModel on _BaseVehiclePage { } } - Future processCancelDeleteRequest() async { + Future processCancelDeleteRequest(dynamic item) async { final int id = item['vehicleId']; return await PhpGroup.deleteVehicle.call(vehicleId: id); } - Future processCancelUpdateRequest() async { + Future processCancelUpdateRequest(dynamic item) async { final int id = item['vehicleId']; return await PhpGroup.deleteVehicle.call(vehicleId: id); } - Future processCancelCreateRequest() async { + Future processCancelCreateRequest(dynamic item) async { final int id = item['vehicleId']; return await PhpGroup.deleteVehicle.call(vehicleId: id); }