860 lines
59 KiB
Markdown
860 lines
59 KiB
Markdown
lib/services/mock_service.dart
|
|
|
|
En este archivo, el uso de Map<String, dynamic> se encuentra como un parámetro en una función.
|
|
|
|
1. Parámetro de Función: Future<void> createWorkerProfile(Map<String, dynamic> data)
|
|
|
|
* Propósito: Esta función simula la creación de un perfil de trabajador en el backend. Acepta un Map llamado data que contiene toda la información del perfil del nuevo trabajador.
|
|
* Estructura del `Map` esperado: Aunque la función en sí misma no revela la estructura, el lugar donde se la llama (profile_setup_screen.dart) nos muestra exactamente qué datos se envían:
|
|
|
|
1 {
|
|
2 'full_name': String,
|
|
3 'bio': String,
|
|
4 'preferred_locations': List<String>,
|
|
5 'max_distance_miles': double,
|
|
6 'skills': List<String>,
|
|
7 'industries': List<String>,
|
|
8 }
|
|
|
|
---
|
|
|
|
A continuación, analizaré el siguiente archivo: lib/widgets/shift_card.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/widgets/shift_card.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Continuando el análisis:
|
|
|
|
---
|
|
|
|
lib/widgets/shift_card.dart
|
|
|
|
En este widget, el uso de Map<String, dynamic> se encuentra como el tipo de retorno de una función.
|
|
|
|
1. Tipo de Retorno de Función: Map<String, dynamic> _calculateDuration()
|
|
|
|
* Propósito: Esta función calcula la duración de un turno en horas y devuelve también una cadena de texto para el tiempo de descanso.
|
|
* Estructura del `Map` devuelto:
|
|
1 {
|
|
2 'hours': int, // La duración calculada del turno en horas.
|
|
3 'breakTime': String, // Una cadena de texto que representa el tiempo de descanso, ej: '1 hour'.
|
|
4 }
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/auth/profile_setup_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../profile_setup_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ De acuerdo, aquí está el análisis del archivo.
|
|
|
|
---
|
|
|
|
lib/screens/auth/profile_setup_screen.dart
|
|
|
|
Este archivo contiene dos usos distintos de Map<String, dynamic>:
|
|
|
|
1. Variable: static const List<Map<String, dynamic>> _steps
|
|
|
|
* Propósito: Define los pasos en el asistente de creación de perfiles.
|
|
* Estructura de cada elemento:
|
|
1 {
|
|
2 'id': String,
|
|
3 'title': String,
|
|
4 'icon': IconData
|
|
5 }
|
|
|
|
2. Argumento de Función: El Map anónimo pasado a mockService.createWorkerProfile({ ... })
|
|
|
|
* Propósito: Recopilar y enviar los datos del perfil del nuevo usuario al servicio (en este caso, un mock).
|
|
* Estructura:
|
|
|
|
1 {
|
|
2 'full_name': String,
|
|
3 'bio': String,
|
|
4 'preferred_locations': List<String>,
|
|
5 'max_distance_miles': double,
|
|
6 'skills': List<String>,
|
|
7 'industries': List<String>
|
|
8 }
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../worker_profile_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Claro, aquí está el análisis del archivo.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile_screen.dart
|
|
|
|
Este archivo contiene dos variables Map<String, dynamic> para datos de simulación (mock).
|
|
|
|
1. Variable: final Map<String, dynamic> _user
|
|
|
|
* Propósito: Almacena los datos básicos de identificación del usuario para mostrarlos en la pantalla de perfil.
|
|
* Estructura:
|
|
1 {
|
|
2 'full_name': String,
|
|
3 'email': String,
|
|
4 }
|
|
|
|
2. Variable: final Map<String, dynamic> _profile
|
|
|
|
* Propósito: Almacena estadísticas y atributos detallados del trabajador para mostrarlos en la pantalla de perfil.
|
|
* Estructura:
|
|
|
|
1 {
|
|
2 'level': String,
|
|
3 'photo_url': String?,
|
|
4 'total_shifts': int,
|
|
5 'average_rating': double,
|
|
6 'on_time_rate': int,
|
|
7 'no_show_count': int,
|
|
8 'cancellation_count': int,
|
|
9 'reliability_score': int,
|
|
10 'phone': String,
|
|
11 'skills': List, // Mockeado como una lista vacía
|
|
12 }
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/benefits_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../worker/benefits_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ De acuerdo, aquí está el análisis del siguiente archivo.
|
|
|
|
---
|
|
|
|
lib/screens/worker/benefits_screen.dart
|
|
|
|
Este archivo utiliza Map<String, dynamic> para gestionar los datos de los beneficios del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _benefitsData
|
|
|
|
* Propósito: Contiene los datos de simulación (mock) para los diferentes beneficios del trabajador, como días de enfermedad y vacaciones.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'title': String,
|
|
4 'current': int,
|
|
5 'total': int,
|
|
6 'color': Color,
|
|
7 'description': String,
|
|
8 'history': List<Map<String, dynamic>>, // <- Lista anidada
|
|
9 'requestLabel': String,
|
|
10 'notice': String?, // Opcional
|
|
11 }
|
|
* Estructura anidada de `history`:
|
|
1 {
|
|
2 'date': String,
|
|
3 'status': String
|
|
4 }
|
|
|
|
2. Parámetro de Función: void _handleRequest(Map<String, dynamic> benefit)
|
|
|
|
* Propósito: Maneja la acción cuando un usuario solicita un beneficio, tomando uno de los objetos Map de _benefitsData como entrada.
|
|
* Estructura: La misma que la de los elementos en _benefitsData.
|
|
|
|
3. Parámetro de Widget: final Map<String, dynamic> benefit (en _BenefitCard)
|
|
|
|
* Propósito: El widget _BenefitCard utiliza un Map de _benefitsData para mostrar los detalles de un beneficio.
|
|
* Estructura: La misma que la de los elementos en _benefitsData.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/compliance/documents_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../documents_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/compliance/documents_screen.dart
|
|
|
|
Este archivo, similar a otros, usa Map<String, dynamic> para la gestión de datos de UI.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _requiredDocs
|
|
|
|
* Propósito: Almacena la lista de documentos de cumplimiento requeridos para el trabajador.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'name': String,
|
|
4 'description': String,
|
|
5 'status': String // Ejemplo: 'verified', 'pending', 'missing'
|
|
6 }
|
|
|
|
2. Parámetro de Función: Widget _buildDocumentCard(Map<String, dynamic> doc)
|
|
|
|
* Propósito: Es una función de construcción que crea una tarjeta de UI para un solo documento, tomando como entrada un Map de la lista _requiredDocs.
|
|
* Estructura: La estructura del parámetro doc es la misma que la de los elementos en la lista _requiredDocs.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/onboarding/emergency_contact_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile l/.../emergency_contact_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/onboarding/emergency_contact_screen.dart
|
|
|
|
Este archivo gestiona los contactos de emergencia del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _contacts
|
|
|
|
* Propósito: Almacena una lista de los contactos de emergencia del trabajador.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'name': String,
|
|
3 'phone': String,
|
|
4 'relationship': String // Ejemplo: 'family', 'spouse', 'friend', 'other'
|
|
5 }
|
|
|
|
2. Parámetro de Función: Widget _buildContactForm(int index, Map<String, dynamic> contact)
|
|
|
|
* Propósito: Es una función de construcción que toma un Map de un solo contacto de la lista _contacts para crear un formulario para ese contacto.
|
|
* Estructura: La estructura del parámetro contact es la misma que la de los elementos en la lista _contacts.
|
|
|
|
3. Parámetro de Función: void _updateContact(int index, String field, dynamic value)
|
|
|
|
* Propósito: Esta función actualiza un campo dentro de un Map de contacto específico en la lista _contacts. El value es dynamic ya que puede ser un String de un TextField o de un
|
|
DropdownButton.
|
|
* Estructura: No tiene una estructura de mapa específica, pero opera sobre los mapas dentro de la lista _contacts.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/compliance/certificates_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../certificates_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Okay, aquí está el análisis del archivo certificates_screen.dart.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/compliance/certificates_screen.dart
|
|
|
|
Este archivo maneja los certificados de cumplimiento del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _certificates
|
|
|
|
* Propósito: Almacena una lista de los certificados de cumplimiento del trabajador (por ejemplo, verificación de antecedentes, manipulador de alimentos).
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'name': String,
|
|
4 'icon': IconData,
|
|
5 'color': Color,
|
|
6 'description': String,
|
|
7 'status': String, // Ejemplo: 'complete', 'expiring', 'not_started'
|
|
8 'expiry': String?, // Cadena de fecha ISO 8601 que puede ser nula
|
|
9 }
|
|
|
|
2. Parámetro de Función: Widget _buildCertificateCard(Map<String, dynamic> cert)
|
|
|
|
* Propósito: Es una función de construcción que crea una tarjeta de UI para un solo certificado, tomando como entrada un Map de la lista _certificates.
|
|
* Estructura: La estructura del parámetro cert es la misma que la de los elementos en _certificates.
|
|
|
|
3. Parámetro de Función: void _showUploadModal(BuildContext context, Map<String, dynamic>? cert)
|
|
|
|
* Propósito: Esta función muestra una hoja modal para subir un certificado. Acepta un Map opcional cert. Si se proporciona cert, el modal es para renovar o ver ese certificado específico.
|
|
Si es null, es para subir un nuevo certificado sin categoría.
|
|
* Estructura: La estructura del parámetro cert es la misma que la de los elementos en _certificates.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/compliance/tax_forms_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../tax_forms_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/compliance/tax_forms_screen.dart
|
|
|
|
Este archivo gestiona la lista de formularios de impuestos del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _forms
|
|
|
|
* Propósito: Almacena una lista de los formularios de impuestos requeridos.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'title': String,
|
|
4 'subtitle': String,
|
|
5 'description': String,
|
|
6 'status': String, // Ejemplo: 'submitted', 'not_started'
|
|
7 'icon': String, // Un emoji usado como icono
|
|
8 }
|
|
|
|
2. Parámetro de Función: Widget _buildFormCard(Map<String, dynamic> form)
|
|
|
|
* Propósito: Es una función de construcción que crea una tarjeta de UI para un solo formulario de impuestos, tomando como entrada un Map de la lista _forms.
|
|
* Estructura: La estructura del parámetro form es la misma que la de los elementos en la lista _forms.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/onboarding/personal_info_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../personal_info_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/onboarding/personal_info_screen.dart
|
|
|
|
Este archivo contiene los datos de simulación (mock) para el formulario de información personal.
|
|
|
|
1. Variable: final Map<String, dynamic> _user
|
|
|
|
* Propósito: Almacena los datos básicos del usuario para mostrarlos en el formulario.
|
|
* Estructura:
|
|
|
|
1 {
|
|
2 'full_name': String,
|
|
3 'email': String,
|
|
4 'photo_url': String?, // Admite valores nulos
|
|
5 }
|
|
* Nota: Esta versión del mock _user es ligeramente diferente a la de worker_profile_screen.dart, ya que incluye el campo photo_url.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/onboarding/attire_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../attire_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/onboarding/attire_screen.dart
|
|
|
|
Este archivo maneja el "armario" o la vestimenta que posee el trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _attireOptions
|
|
|
|
* Propósito: Proporciona una lista de opciones de vestimenta seleccionables para el trabajador.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'label': String,
|
|
4 'icon': IconData,
|
|
5 'imageUrl': String,
|
|
6 }
|
|
|
|
(Nota: Este archivo también contiene `Map<String, String>` y `Map<String, bool>` para la gestión del estado, pero no coinciden con el tipo `Map<String, dynamic>`).
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/compliance/taxforms/form_i9_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../form_i9_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/compliance/taxforms/form_i9_screen.dart
|
|
|
|
Este archivo contiene el formulario I-9 y utiliza mapas para gestionar los datos del formulario y los pasos del asistente.
|
|
|
|
1. Variable: final Map<String, dynamic> _formData
|
|
|
|
* Propósito: Almacena el estado de los campos del formulario I-9 mientras el usuario los completa.
|
|
* Estructura:
|
|
|
|
1 {
|
|
2 'lastName': String,
|
|
3 'firstName': String,
|
|
4 'middleInitial': String,
|
|
5 'otherLastNames': String,
|
|
6 'address': String,
|
|
7 'aptNumber': String,
|
|
8 'city': String,
|
|
9 'state': String?, // Admite valores nulos
|
|
10 'zipCode': String,
|
|
11 'dateOfBirth': String,
|
|
12 'ssn': String,
|
|
13 'email': String,
|
|
14 'phone': String,
|
|
15 'citizenshipStatus': String,
|
|
16 'uscisNumber': String,
|
|
17 'i94Number': String,
|
|
18 'foreignPassportNumber': String,
|
|
19 'countryOfIssuance': String,
|
|
20 'expirationDate': String,
|
|
21 }
|
|
|
|
2. Variable: final List<Map<String, String>> _steps
|
|
|
|
* Nota: Aunque este no es un Map<String, dynamic>, sigue un patrón similar.
|
|
* Propósito: Define los pasos del asistente del formulario I-9.
|
|
* Estructura de cada elemento:
|
|
1 {
|
|
2 'title': String,
|
|
3 'subtitle': String,
|
|
4 }
|
|
|
|
3. Parámetro de Función: void _updateField(String key, dynamic value)
|
|
|
|
* Propósito: Esta función actualiza un campo en el mapa _formData. El value es dynamic porque puede ser un String de un TextField o de un DropdownButton.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/compliance/taxforms/form_w4_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../form_w4_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Claro, aquí tienes el análisis.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/compliance/taxforms/form_w4_screen.dart
|
|
|
|
Este archivo contiene el formulario W-4 y, de manera similar al I-9, utiliza mapas para gestionar los datos.
|
|
|
|
1. Variable: final Map<String, dynamic> _formData
|
|
|
|
* Propósito: Almacena el estado de los campos del formulario W-4 mientras el usuario los completa.
|
|
* Estructura:
|
|
|
|
1 {
|
|
2 'firstName': String,
|
|
3 'lastName': String,
|
|
4 'address': String,
|
|
5 'cityStateZip': String,
|
|
6 'ssn': String,
|
|
7 'filingStatus': String,
|
|
8 'multipleJobs': bool,
|
|
9 'qualifyingChildren': int,
|
|
10 'otherDependents': int,
|
|
11 'otherIncome': String, // Representa una cantidad en dólares
|
|
12 'deductions': String, // Representa una cantidad en dólares
|
|
13 'extraWithholding': String, // Representa una cantidad en dólares
|
|
14 }
|
|
|
|
2. Variable: final List<Map<String, String>> _steps
|
|
|
|
* Nota: Aunque este es un List<Map<String, String>>, sigue un patrón de uso de mapas para definir metadatos.
|
|
* Propósito: Define los pasos del asistente del formulario W-4.
|
|
* Estructura de cada elemento:
|
|
1 {
|
|
2 'title': String,
|
|
3 'subtitle': String,
|
|
4 }
|
|
|
|
3. Parámetro de Función: void _updateField(String key, dynamic value)
|
|
|
|
* Propósito: Esta función actualiza un campo en el mapa _formData. El value es dynamic porque puede ser un String, bool, o int dependiendo del campo del formulario que se esté
|
|
actualizando.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/level_up/trainings_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../trainings_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ De acuerdo.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/level_up/trainings_screen.dart
|
|
|
|
Este archivo contiene la lista de cursos de capacitación para los trabajadores.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _courses
|
|
|
|
* Propósito: Almacena una lista de los cursos de capacitación disponibles.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'title': String,
|
|
4 'description': String,
|
|
5 'duration_minutes': int,
|
|
6 'xp_reward': int,
|
|
7 'thumbnail_url': String?, // Admite valores nulos
|
|
8 'progress_percent': int,
|
|
9 'completed': bool,
|
|
10 }
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/finances/time_card_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../time_card_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Okay, analicemos este archivo.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/finances/time_card_screen.dart
|
|
|
|
Este archivo se utiliza para mostrar el historial de horas trabajadas del empleado.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _timesheets
|
|
|
|
* Propósito: Almacena una lista de registros de hojas de tiempo (timesheets) para los turnos trabajados.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'shift_id': String,
|
|
4 'date': String, // Cadena en formato ISO 8601
|
|
5 'actual_start': String,
|
|
6 'actual_end': String,
|
|
7 'total_hours': double,
|
|
8 'hourly_rate': double,
|
|
9 'total_pay': double,
|
|
10 'status': String, // Ejemplo: 'pending', 'approved', 'paid'
|
|
11 'shift_title': String,
|
|
12 'client_name': String,
|
|
13 'location': String,
|
|
14 }
|
|
|
|
2. Parámetro de Función: Widget _buildShiftHistory(List<Map<String, dynamic>> timesheets)
|
|
|
|
* Propósito: Es una función de construcción que toma una lista de mapas de hojas de tiempo para renderizar la sección de historial.
|
|
* Estructura: La estructura del parámetro timesheets es una lista de mapas, donde cada mapa tiene la misma estructura que los elementos en _timesheets.
|
|
|
|
3. Parámetro de Función: Widget _buildTimesheetCard(Map<String, dynamic> timesheet)
|
|
|
|
* Propósito: Es una función de construcción que crea una tarjeta de UI para un único registro de hoja de tiempo de la lista _timesheets.
|
|
* Estructura: La estructura del parámetro timesheet es la misma que la de los elementos en _timesheets.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/support/faqs_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../support/faqs_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/support/faqs_screen.dart
|
|
|
|
Este archivo contiene los datos para la pantalla de Preguntas Frecuentes (FAQs).
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _faqData
|
|
|
|
* Propósito: Almacena los datos para las preguntas frecuentes, organizados por categoría.
|
|
* Estructura de cada elemento (categoría):
|
|
|
|
1 {
|
|
2 'category': String,
|
|
3 'questions': List<Map<String, dynamic>>, // <- Lista anidada
|
|
4 }
|
|
* Estructura anidada de `questions`:
|
|
1 {
|
|
2 'q': String, // La pregunta
|
|
3 'a': String, // La respuesta
|
|
4 }
|
|
|
|
(Nota: Este archivo también contiene un `Map<String, bool>` llamado `_openItems` para gestionar el estado de la UI, pero no coincide con el tipo `Map<String, dynamic>`).
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/level_up/krow_university_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../krow_university_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/level_up/krow_university_screen.dart
|
|
|
|
Este archivo es para la sección de "KROW University" y contiene varios usos de Map<String, dynamic>.
|
|
|
|
1. Variable: final Map<String, dynamic> _profile
|
|
|
|
* Propósito: Almacena un subconjunto de los datos del perfil del trabajador que son relevantes para la sección de universidad/capacitación.
|
|
* Estructura:
|
|
|
|
1 {
|
|
2 'level': String,
|
|
3 'xp': int,
|
|
4 'nextLevelXp': int,
|
|
5 'completed_courses': int,
|
|
6 }
|
|
* Nota: Este mapa _profile es inconsistente con el que se encuentra en worker_profile_screen.dart, lo que demuestra la necesidad de un modelo de datos unificado.
|
|
|
|
2. Variable: final List<Map<String, dynamic>> _categories
|
|
|
|
* Propósito: Define las categorías para los cursos de la universidad.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'label': String,
|
|
4 'icon': IconData,
|
|
5 }
|
|
|
|
3. Variable: final List<Map<String, dynamic>> _courses
|
|
|
|
* Propósito: Almacena una lista de los cursos universitarios disponibles.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'title': String,
|
|
4 'description': String,
|
|
5 'category': String,
|
|
6 'duration_minutes': int,
|
|
7 'xp_reward': int,
|
|
8 'level_required': String,
|
|
9 'is_certification': bool,
|
|
10 'progress_percent': int,
|
|
11 'completed': bool,
|
|
12 }
|
|
|
|
4. Parámetro de Función: Widget _buildCoursesGrid(List<Map<String, dynamic>> courses)
|
|
|
|
* Propósito: Es una función de construcción que toma una lista de mapas de cursos (filtrados de _courses) para renderizarlos en una cuadrícula.
|
|
* Estructura: La estructura del parámetro courses es una lista de mapas, donde cada mapa tiene la misma estructura que los elementos en _courses.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/level_up/leaderboard_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../leaderboard_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos con el siguiente archivo.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/level_up/leaderboard_screen.dart
|
|
|
|
Este archivo es para la pantalla de la tabla de clasificación (Leaderboard) y utiliza mapas extensivamente para manejar los datos de los perfiles.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _profiles
|
|
|
|
* Propósito: Almacena los datos de simulación (mock) para la tabla de clasificación, representando diferentes perfiles de trabajadores.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'name': String,
|
|
4 'photo_url': String?, // Admite valores nulos
|
|
5 'xp': int,
|
|
6 'level': String,
|
|
7 'user_id': String,
|
|
8 }
|
|
|
|
2. Variable: final sortedProfiles = List<Map<String, dynamic>>.from(_profiles)
|
|
|
|
* Propósito: Crea una copia mutable de la lista _profiles que puede ser ordenada por XP.
|
|
* Estructura: Los elementos tienen la misma estructura que en _profiles.
|
|
|
|
3. Parámetro de Función: Widget _buildPodium(List<Map<String, dynamic>> topThree)
|
|
|
|
* Propósito: Es una función de construcción que toma los tres perfiles principales para renderizar la sección del podio.
|
|
* Estructura: La lista topThree contiene mapas con la misma estructura que en _profiles.
|
|
|
|
4. Parámetro de Función: Widget _buildPodiumItem(Map<String, dynamic> profile, ...)
|
|
|
|
* Propósito: Es una función de construcción para crear la UI de un solo perfil en el podio.
|
|
* Estructura: El parámetro profile tiene la misma estructura que un elemento en _profiles.
|
|
|
|
5. Parámetro de Función: Widget _buildRestList(List<Map<String, dynamic>> rest, ...)
|
|
|
|
* Propósito: Es una función de construcción que toma el resto de los perfiles (que no están en el top tres) para renderizarlos como una lista estándar.
|
|
* Estructura: La lista rest contiene mapas con la misma estructura que en _profiles.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/worker_profile/finances/bank_account_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../bank_account_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/worker_profile/finances/bank_account_screen.dart
|
|
|
|
Este archivo maneja las cuentas bancarias del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _accounts
|
|
|
|
* Propósito: Almacena una lista de las cuentas bancarias vinculadas del trabajador.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': int,
|
|
3 'bank': String,
|
|
4 'type': String, // Ejemplo: 'Checking', 'Savings'
|
|
5 'last4': String,
|
|
6 'isPrimary': bool,
|
|
7 }
|
|
|
|
2. Parámetro de Función: Widget _buildAccountCard(Map<String, dynamic> account)
|
|
|
|
* Propósito: Es una función de construcción que crea una tarjeta de UI para una sola cuenta bancaria, tomando como entrada un Map de la lista _accounts.
|
|
* Estructura: La estructura del parámetro account es la misma que la de los elementos en la lista _accounts.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/payments_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../worker/payments_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Sigamos.
|
|
|
|
---
|
|
|
|
lib/screens/worker/payments_screen.dart
|
|
|
|
Este archivo muestra el historial de pagos y ganancias del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _recentPayments
|
|
|
|
* Propósito: Almacena los datos de simulación (mock) para una lista de registros de pagos recientes.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'date': String,
|
|
3 'title': String,
|
|
4 'location': String,
|
|
5 'address': String,
|
|
6 'workedTime': String,
|
|
7 'amount': double,
|
|
8 'status': String, // Ejemplo: 'paid'
|
|
9 'hours': int,
|
|
10 'rate': int, // Nota: Esto es un int en el mock, pero probablemente debería ser double como en otros lugares.
|
|
11 }
|
|
* Nota: El widget PaymentHistoryItem que consume estos datos espera que rate sea un double, por lo que el int en los datos del mock es probablemente una pequeña inconsistencia.
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/availability_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../availability_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Okay, aquí está el análisis del archivo de disponibilidad.
|
|
|
|
---
|
|
|
|
lib/screens/worker/availability_screen.dart
|
|
|
|
Este archivo maneja la configuración de la disponibilidad del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _timeSlots
|
|
|
|
* Propósito: Define las propiedades de los diferentes rangos horarios (Mañana, Tarde, Noche) que el usuario puede seleccionar.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'id': String,
|
|
3 'label': String,
|
|
4 'time': String, // Ejemplo: '4:00 AM - 12:00 PM'
|
|
5 'icon': IconData,
|
|
6 'bg': Color,
|
|
7 'iconColor': Color,
|
|
8 }
|
|
|
|
(Nota: Este archivo también utiliza `Map<String, bool>` y `Map<String, Map<String, bool>>` para gestionar el estado de la disponibilidad, pero no coinciden con el tipo `Map<String,
|
|
dynamic>`).
|
|
|
|
---
|
|
|
|
Siguiente archivo: lib/screens/worker/clock_in_screen.dart.
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ ✓ ReadFile lib/.../worker/clock_in_screen.dart │
|
|
│ │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
✦ Okay, aquí está el análisis del último archivo de la lista.
|
|
|
|
---
|
|
|
|
lib/screens/worker/clock_in_screen.dart
|
|
|
|
Este archivo gestiona la pantalla de fichaje (check-in/check-out) del trabajador.
|
|
|
|
1. Variable: final List<Map<String, dynamic>> _recentActivity
|
|
|
|
* Propósito: Almacena una lista de las actividades recientes de fichaje del trabajador.
|
|
* Estructura de cada elemento:
|
|
|
|
1 {
|
|
2 'date': DateTime,
|
|
3 'start': String, // Ejemplo: '09:00 AM'
|
|
4 'end': String, // Ejemplo: '05:00 PM'
|
|
5 'hours': String, // Ejemplo: '8h'
|
|
6 }
|
|
|
|
---
|
|
|
|
✦ He analizado lib/screens/worker/worker_profile/support/messages_screen.dart.
|
|
|
|
Este archivo contiene dos estructuras principales de List<Map<String, dynamic>>:
|
|
|
|
1. Nombre de la variable: _conversations
|
|
* Propósito: Representa una lista de conversaciones de chat.
|
|
* Estructura de cada elemento `Map<String, dynamic>` (que representa una conversación individual):
|
|
|
|
1 {
|
|
2 'sender_id': String, // ID del remitente/otra parte en la conversación
|
|
3 'sender_name': String, // Nombre visible del remitente/otra parte
|
|
4 'lastMessage': String, // Contenido del último mensaje en la conversación
|
|
5 'lastTime': DateTime, // Marca de tiempo del último mensaje
|
|
6 'unread': int, // Número de mensajes no leídos en la conversación
|
|
7 'messages': List<Map<String, dynamic>>, // Lista anidada de mensajes individuales dentro de la conversación
|
|
8 }
|
|
* Estructura Anidada (`messages`): Cada elemento en la lista messages tiene:
|
|
|
|
1 {
|
|
2 'content': String, // El contenido del mensaje
|
|
3 'sender_id': String, // El ID del remitente de este mensaje específico
|
|
4 }
|
|
|
|
El siguiente archivo es: lib/screens/worker/worker_profile/onboarding/attire_screen.dart.
|
|
---
|
|
|
|
He finalizado el análisis de todos los archivos que contenían Map<String, dynamic>. Has podido ver que este tipo de mapa se usa de forma muy extendida en todo el proyecto para simular
|
|
datos, pasar parámetros y definir el estado de los widgets.
|
|
|
|
La principal conclusión es la falta de modelos de datos formales (clases Dart), lo que lleva a la duplicación e inconsistencia de las estructuras de datos en diferentes pantallas.
|
|
|
|
Mi recomendación principal, como ingeniero senior, sería refactorizar este código para usar clases de modelo fuertemente tipadas. Esto mejoraría enormemente la mantenibilidad, la
|
|
legibilidad y la seguridad del código, reduciendo errores a largo plazo.
|
|
|
|
¿Hay alguna de estas estructuras que te interese formalizar en una clase Dart ahora? O, ¿tienes alguna otra pregunta?
|
|
|
|
Using: 1 GEMINI.md file
|