|
import 'package:flutter/material.dart'; |
|
import 'package:flutter/services.dart'; |
|
import 'package:flutter_riverpod/flutter_riverpod.dart'; |
|
|
|
import 'package:miningtrackerapp/config/config_dependencies.dart'; |
|
import 'package:miningtrackerapp/domain/domain_entities.dart'; |
|
import 'package:miningtrackerapp/domain/domain_enums.dart'; |
|
import 'package:miningtrackerapp/presentation/presentation_delegates.dart'; |
|
import 'package:miningtrackerapp/presentation/presentation_enums.dart'; |
|
import 'package:miningtrackerapp/presentation/presentation_widgets.dart'; |
|
import 'package:miningtrackerapp/presentation/providers/tracker/tracker_form_provider.dart'; |
|
|
|
class TrackeItemFormView extends ConsumerWidget { |
|
const TrackeItemFormView({ |
|
super.key, |
|
required this.tracker, |
|
}); |
|
|
|
final Tracker tracker; |
|
|
|
@override |
|
Widget build(BuildContext context, WidgetRef ref) { |
|
final isUsedTracker = tracker.isUsedTracker; |
|
final expeditionDate = HelperConverter.getYmed(tracker.expeditionDateTime); |
|
final expeditionTime = HelperConverter.getHHmmssFromDateTime( |
|
tracker.expeditionDateTime, false); |
|
|
|
final trackerForm = ref.watch(trackerFormProvider(tracker)); |
|
|
|
return Form( |
|
child: SingleChildScrollView( |
|
child: Padding( |
|
padding: const EdgeInsets.all(8.0), |
|
child: Column( |
|
children: [ |
|
SizedBox( |
|
height: 36.0, |
|
child: Container( |
|
width: double.maxFinite, |
|
color: isUsedTracker |
|
? const Color(0xFFef5350) |
|
: const Color(0xFF26a69a), |
|
child: Align( |
|
child: Text( |
|
isUsedTracker ? '🔒 Usada' : '🔓 Editable', |
|
style: const TextStyle( |
|
fontSize: 16, fontWeight: FontWeight.w700), |
|
), |
|
), |
|
), |
|
), |
|
|
|
SizedBox( |
|
height: 48.0, |
|
child: Align( |
|
child: Text( |
|
"Hora actual: $expeditionTime Hs • $expeditionDate\n${tracker.trackerCode}", |
|
textAlign: TextAlign.center, |
|
style: const TextStyle(fontSize: 16), |
|
), |
|
), |
|
), |
|
|
|
const CustomDivider(), |
|
|
|
// MANAGER FIRST NAME |
|
CustomTextFormField( |
|
label: '🟦 Encargado: Nombre', |
|
keyboardType: TextInputType.text, |
|
initialValue: trackerForm.managerFirstName.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onManagerFirstNameChanged, |
|
errorMessage: trackerForm.managerFirstName.errorMessage, |
|
), |
|
|
|
// MANAGER LAST NAME |
|
CustomTextFormField( |
|
label: '🟦 Encargado: Apellido', |
|
keyboardType: TextInputType.text, |
|
initialValue: trackerForm.managerLastName.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onManagerLastNameChanged, |
|
errorMessage: trackerForm.managerLastName.errorMessage, |
|
), |
|
|
|
// MANAGER ID TYPE |
|
CustomDropDownMenu<IdentificationEnum>( |
|
label: '🟦 Tipo de identificación', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.managerSelectedIdentificationId.value, |
|
dropdownType: DropdownType.identificationEnum, |
|
itemList: getIdentificationEnumAsList(), |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onManagerIdSelectedIdentificationChanged, |
|
errorMessage: |
|
trackerForm.managerSelectedIdentificationId.errorMessage, |
|
), |
|
|
|
// MANAGER ID NUMBER |
|
CustomTextFormField( |
|
label: '🟦 Número de identificación', |
|
initialValue: trackerForm.managerIdentificationNumber.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onManagerIdentificationNumberChanged, |
|
errorMessage: |
|
trackerForm.managerIdentificationNumber.errorMessage, |
|
), |
|
|
|
const CustomDivider(), |
|
|
|
// MINERAL NAME |
|
CustomDropDownMenu<MineralEnum>( |
|
label: '🟫 Mineral: Nombre', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.trackerSelectedMineralId.value, |
|
dropdownType: DropdownType.mineralEnum, |
|
itemList: |
|
getMineralEnumAsList(tracker.metatracker?.requestMinerals), |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onTrackerIdSelectedMineralChanged, |
|
errorMessage: trackerForm.trackerSelectedMineralId.errorMessage, |
|
), |
|
|
|
// MINERAL QUANTITY |
|
CustomTextFormField( |
|
label: '🟫 Mineral: Cantidad (Tn)', |
|
keyboardType: TextInputType.number, |
|
initialValue: trackerForm.trackerMineralQuantity.value, |
|
isReadOnly: isUsedTracker, |
|
inputFormatters: <TextInputFormatter>[ |
|
FilteringTextInputFormatter.digitsOnly |
|
], |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onTrackerMineralQuantityChanged, |
|
errorMessage: trackerForm.trackerMineralQuantity.errorMessage, |
|
), |
|
|
|
// MINERAL USAGE |
|
CustomDropDownMenu<UsageEnum>( |
|
label: '🟫 Mineral: Uso', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.trackerSelectedUsageId.value, |
|
dropdownType: DropdownType.usageEnum, |
|
itemList: getUsageEnumAsList(), |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onTtrackerSelectedUsageIdChanged, |
|
errorMessage: trackerForm.trackerSelectedUsageId.errorMessage, |
|
), |
|
|
|
// IS INDUSTRIALIZED MINERAL |
|
CustomButtonSwitch( |
|
title: '🟫 ¿Es mineral industrializado?', |
|
subtitle: 'Según decreto Nº 525/2010', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.trackerIsIndustrializedMineral, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onTrackerIsIndustrializedMineralChanged, |
|
), |
|
|
|
// INDUSTRIAL DEGREE |
|
CustomDropDownMenu<IndustrializationEnum>( |
|
label: '🟫 Industrialización: Grado', |
|
isReadOnly: isUsedTracker, |
|
initialValue: |
|
trackerForm.trackerSelectedIndustrializationId.value, |
|
dropdownType: DropdownType.industrializationEnum, |
|
itemList: getIndustrializationEnumAsList(), |
|
enabled: |
|
ref.read(trackerIsIndustrializedProvider.notifier).state, |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onTrackerSelectedIndustrializationIdChanged, |
|
errorMessage: |
|
trackerForm.trackerSelectedIndustrializationId.errorMessage, |
|
), |
|
|
|
const CustomDivider(), |
|
|
|
// DRIVER FIRST NAME |
|
CustomTextFormField( |
|
label: '🟥 Conductor: Nombre', |
|
initialValue: trackerForm.driverFirstName.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDriverFirstNameChanged, |
|
errorMessage: trackerForm.driverFirstName.errorMessage, |
|
), |
|
|
|
// DRIVER LAST NAME |
|
CustomTextFormField( |
|
label: '🟥 Conductor: Apellido', |
|
initialValue: trackerForm.driverLastName.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDriverLastNameChanged, |
|
errorMessage: trackerForm.driverLastName.errorMessage, |
|
), |
|
|
|
// DRIVER ID TYPE |
|
CustomDropDownMenu<IdentificationEnum>( |
|
label: '🟥 Tipo de identificación', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.driverSelectedIdentificationId.value, |
|
dropdownType: DropdownType.identificationEnum, |
|
itemList: getIdentificationEnumAsList(), |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDriverIdSelectedIdentificationChanged, |
|
errorMessage: |
|
trackerForm.driverSelectedIdentificationId.errorMessage, |
|
), |
|
|
|
// DRIVER ID NUMBER |
|
CustomTextFormField( |
|
label: '🟥 Número de identificación', |
|
initialValue: trackerForm.driverIdentificationNumber.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDriverIdentificationNumberChanged, |
|
errorMessage: |
|
trackerForm.driverIdentificationNumber.errorMessage, |
|
), |
|
|
|
// VEHICLE ID |
|
CustomTextFormField( |
|
label: '🟥 Vehículo: Dominio', |
|
initialValue: trackerForm.vehicleIdentificationNumber.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onVehicleIdentificationNumberChanged, |
|
errorMessage: |
|
trackerForm.vehicleIdentificationNumber.errorMessage, |
|
), |
|
|
|
const CustomDivider(), |
|
|
|
// COUNTRY |
|
CustomDropDownMenu<CountryEnum>( |
|
label: '🟩 Destino: País', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.destinationSelectedCountryId.value, |
|
dropdownType: DropdownType.countryEnum, |
|
itemList: getCountryEnumAsList(), |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDestinationSelectedCountryIdChanged, |
|
errorMessage: |
|
trackerForm.destinationSelectedCountryId.errorMessage, |
|
), |
|
|
|
// PROVINCE |
|
CustomDropDownMenu<ProvinceEnum>( |
|
label: '🟩 Destino: Provincia', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.destinationSelectedProvinceId.value, |
|
dropdownType: DropdownType.provinceEnum, |
|
itemList: getProvinceEnumAsList(), |
|
enabled: |
|
ref.watch(trackerIsProvinceSelectedProvider.notifier).state, |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDestinationSelectedProvinceIdChanged, |
|
errorMessage: |
|
trackerForm.destinationSelectedProvinceId.errorMessage, |
|
), |
|
|
|
// LOCALITY |
|
CustomDropDownMenu<LocalityEnum>( |
|
label: '🟩 Destino: Localidad', |
|
isReadOnly: isUsedTracker, |
|
initialValue: trackerForm.destinationSelectedLocalityId.value, |
|
dropdownType: DropdownType.localityEnum, |
|
itemList: ref.read(trackerLocalityListProvider.notifier).state!, |
|
enabled: |
|
ref.watch(trackerIsLocalitySelectedProvider.notifier).state, |
|
onSelected: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDestinationSelectedLocalityIdChanged, |
|
errorMessage: |
|
trackerForm.destinationSelectedLocalityId.errorMessage, |
|
), |
|
|
|
// DESTINATION |
|
CustomTextFormField( |
|
label: '🟩 Destino: Nombre', |
|
initialValue: trackerForm.destinationName.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDestinationNameChanged, |
|
errorMessage: trackerForm.destinationName.errorMessage, |
|
), |
|
|
|
// STREET NAME |
|
CustomTextFormField( |
|
label: '🟩 Destino: Calle', |
|
initialValue: trackerForm.destinationStreetName.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDestinationStreetNameChanged, |
|
errorMessage: trackerForm.destinationStreetName.errorMessage, |
|
), |
|
|
|
// STREET NUMBER |
|
CustomTextFormField( |
|
label: '🟩 Destino: Número de calle/Km', |
|
initialValue: trackerForm.destinationStreetNumber.value, |
|
isReadOnly: isUsedTracker, |
|
onChanged: ref |
|
.read(trackerFormProvider(tracker).notifier) |
|
.onDestinationStreetNumberChanged, |
|
errorMessage: trackerForm.destinationStreetNumber.errorMessage, |
|
), |
|
|
|
isUsedTracker |
|
? const SizedBox() |
|
: const SizedBox( |
|
height: 60, |
|
), |
|
], |
|
), |
|
), |
|
), |
|
); |
|
} |
|
} |