Skip to content

Instantly share code, notes, and snippets.

@carloswm85
Created March 18, 2026 13:36
Show Gist options
  • Select an option

  • Save carloswm85/d692be80a7e4857997e2aab8a6832434 to your computer and use it in GitHub Desktop.

Select an option

Save carloswm85/d692be80a7e4857997e2aab8a6832434 to your computer and use it in GitHub Desktop.

Table of Contents

  • Fields detected
  • Categorized view

Fields detected

These are the form fields (data inputs) used in the UI, extracted from trackerForm:

# Field Name
1 managerFirstName
2 managerLastName
3 managerSelectedIdentificationId
4 managerIdentificationNumber
5 trackerSelectedMineralId
6 trackerMineralQuantity
7 trackerSelectedUsageId
8 trackerIsIndustrializedMineral
9 trackerSelectedIndustrializationId
10 driverFirstName
11 driverLastName
12 driverSelectedIdentificationId
13 driverIdentificationNumber
14 vehicleIdentificationNumber
15 destinationSelectedCountryId
16 destinationSelectedProvinceId
17 destinationSelectedLocalityId
18 destinationName
19 destinationStreetName
20 destinationStreetNumber

Categorized view

🟦 Manager

  • managerFirstName
  • managerLastName
  • managerSelectedIdentificationId
  • managerIdentificationNumber

🟫 Mineral / Tracker

  • trackerSelectedMineralId
  • trackerMineralQuantity
  • trackerSelectedUsageId
  • trackerIsIndustrializedMineral
  • trackerSelectedIndustrializationId

🟥 Driver / Vehicle

  • driverFirstName
  • driverLastName
  • driverSelectedIdentificationId
  • driverIdentificationNumber
  • vehicleIdentificationNumber

🟩 Destination

  • destinationSelectedCountryId
  • destinationSelectedProvinceId
  • destinationSelectedLocalityId
  • destinationName
  • destinationStreetName
  • destinationStreetNumber

Non-form (context fields)

These are not editable inputs, but still used in the view:

  • tracker.isUsedTracker
  • tracker.expeditionDateTime
  • tracker.trackerCode
  • tracker.metatracker?.requestMinerals

If you want, I can map this directly to a SQL table or DTO model.

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,
),
],
),
),
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment