feat: creacion de interfaz xon simulacion de rutas
This commit is contained in:
12
.vscode/settings.json
vendored
Normal file
12
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"yaml.customTags": [
|
||||||
|
"!upload scalar",
|
||||||
|
"!remove scalar",
|
||||||
|
"!keep scalar",
|
||||||
|
"!erase scalar",
|
||||||
|
"!jwt scalar"
|
||||||
|
],
|
||||||
|
"yaml.schemas": {
|
||||||
|
"https://raw.githubusercontent.com/doanthuanthanh88/testapi6/main/schema.json": "*.yaml"
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -63,13 +63,12 @@ class _LoginScreenState extends State<LoginScreen>
|
|||||||
);
|
);
|
||||||
|
|
||||||
// 1. Obtener la conexión por el cable USB Mapped
|
// 1. Obtener la conexión por el cable USB Mapped
|
||||||
|
// 1. Obtener la conexión
|
||||||
final conn = await MySqlService().getConnection();
|
final conn = await MySqlService().getConnection();
|
||||||
|
|
||||||
// 2. Ejecutar la búsqueda con los nombres exactos de tus columnas
|
// 2. Modificamos el SELECT para traer también la columna 'colonia'
|
||||||
|
|
||||||
// 2. Modificamos el SELECT para buscar SOLO por email
|
|
||||||
final result = await conn.execute(
|
final result = await conn.execute(
|
||||||
"SELECT email, contrasena_hash, rol FROM usuarios WHERE email = :email",
|
"SELECT email, contrasena_hash, rol, colonia FROM usuarios WHERE email = :email",
|
||||||
{
|
{
|
||||||
"email": _identifierController.text.trim(),
|
"email": _identifierController.text.trim(),
|
||||||
},
|
},
|
||||||
@@ -82,20 +81,18 @@ class _LoginScreenState extends State<LoginScreen>
|
|||||||
final contrasenaEnBd = usuarioEncontrado['contrasena_hash'];
|
final contrasenaEnBd = usuarioEncontrado['contrasena_hash'];
|
||||||
final email = usuarioEncontrado['email'];
|
final email = usuarioEncontrado['email'];
|
||||||
final rol = usuarioEncontrado['rol'];
|
final rol = usuarioEncontrado['rol'];
|
||||||
|
final colonia = usuarioEncontrado[
|
||||||
|
'colonia']; // 📍 Extraemos la colonia real de la BD
|
||||||
|
|
||||||
// 3. Validamos la contraseña directamente en Flutter comparando textos limpios
|
|
||||||
if (contrasenaEnBd?.trim() == _passwordController.text.trim()) {
|
if (contrasenaEnBd?.trim() == _passwordController.text.trim()) {
|
||||||
|
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text("¡Bienvenido de nuevo, $email ($rol)!")),
|
SnackBar(content: Text("¡Bienvenido de nuevo, $email ($rol)!")),
|
||||||
);
|
);
|
||||||
|
|
||||||
// 📍 CORRECCIÓN DEFINITIVA: Usamos GoRouter nativo en lugar de Navigator
|
// 📍 Enviamos la colonia real extraída de MySQL directamente a la URL del Home
|
||||||
// Esto elimina por completo el conflicto de aserción en el árbol de widgets
|
context.go('/home?colonia=$colonia');
|
||||||
context.go('/home?colonia=Centro');
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Contraseña mal mapeada en la BD
|
// Contraseña mal mapeada en la BD
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'dart:math'; //
|
||||||
import '../../../../core/network/mysql_service.dart'; // 📍 Ajusta las carpetas '../' según tu proyecto
|
import '../../../../core/network/mysql_service.dart'; // 📍 Ajusta las carpetas '../' según tu proyecto
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
@@ -129,15 +130,18 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
'=== DEPURACIÓN: ¡Conexión obtenida! Estado connected: ${conn.connected}');
|
'=== DEPURACIÓN: ¡Conexión obtenida! Estado connected: ${conn.connected}');
|
||||||
|
|
||||||
print('=== DEPURACIÓN: Intentando ejecutar INSERT ===');
|
print('=== DEPURACIÓN: Intentando ejecutar INSERT ===');
|
||||||
|
final randomPhone =
|
||||||
|
'461${1000000 + Random().nextInt(9000000)}'; // 📍 ENVIANDO LA COLONIA REAL A TU NUEVA COLUMNA DE MYSQL
|
||||||
final result = await conn.execute(
|
final result = await conn.execute(
|
||||||
"INSERT INTO usuarios (email, telefono, contrasena_hash, rol, is_verified) VALUES (:email, :telefono, :contrasena_hash, :rol, :is_verified)",
|
"INSERT INTO usuarios (email, telefono, contrasena_hash, rol, is_verified, colonia) VALUES (:email, :telefono, :contrasena_hash, :rol, :is_verified, :colonia)",
|
||||||
{
|
{
|
||||||
"email": _emailController.text.trim(),
|
"email": _emailController.text.trim(),
|
||||||
"telefono": "4611234567",
|
"telefono": randomPhone, // 📍 Genera un teléfono simulado para cumplir con el esquema de tu tabla
|
||||||
"contrasena_hash": _passwordController.text,
|
"contrasena_hash": _passwordController.text,
|
||||||
"rol":
|
"rol": "Ciudadano",
|
||||||
"Ciudadano", // 📍 CORRECCIÓN: Cambia "ciudadano" por "Ciudadano" (con mayúscula)
|
|
||||||
"is_verified": 1,
|
"is_verified": 1,
|
||||||
|
"colonia":
|
||||||
|
_selectedColonia, // 📍 Envía la colonia seleccionada en el Dropdown
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user