hotfix: Views logic

This commit is contained in:
imlildud
2026-05-22 18:08:12 -06:00
parent 6012674aa5
commit df7b74063b
4 changed files with 92 additions and 48 deletions

View File

@@ -1,10 +1,31 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'nav_bar.dart'; import 'nav_bar.dart';
import 'rutas.dart'; import 'rutas.dart';
import 'domicilios.dart';
import 'horarios.dart';
class ConfiguracionView extends StatelessWidget { class ConfiguracionView extends StatelessWidget {
const ConfiguracionView({super.key}); const ConfiguracionView({super.key});
void _navigateTo(BuildContext context, int index) {
if (index == 2) return; // Ya estamos en Configuración
switch (index) {
case 0:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const DomiciliosView()),
);
break;
case 1:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const HorariosView()),
);
break;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -20,8 +41,7 @@ class ConfiguracionView extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
GestureDetector( GestureDetector(
onTap: () { onTap: () {},
},
child: Container( child: Container(
padding: const EdgeInsets.all(15), padding: const EdgeInsets.all(15),
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -43,7 +63,10 @@ class ConfiguracionView extends StatelessWidget {
], ],
), ),
), ),
bottomNavigationBar: const CustomNavBar(currentIndex: 2), bottomNavigationBar: CustomNavBar(
currentIndex: 2,
onTap: (index) => _navigateTo(context, index),
),
); );
} }
} }

View File

@@ -1,10 +1,31 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'nav_bar.dart'; // Importar la nueva barra import 'nav_bar.dart';
import 'rutas.dart'; import 'rutas.dart';
import 'horarios.dart';
import 'configuracion.dart';
class DomiciliosView extends StatelessWidget { class DomiciliosView extends StatelessWidget {
const DomiciliosView({super.key}); const DomiciliosView({super.key});
void _navigateTo(BuildContext context, int index) {
if (index == 0) return;
switch (index) {
case 1:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const HorariosView()),
);
break;
case 2:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const ConfiguracionView()),
);
break;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -32,7 +53,7 @@ class DomiciliosView extends StatelessWidget {
const Column( const Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text('Mi Casa', // Cambiar por datos reales Text('Mi Casa',
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold)),
Text('Centro, Ruta 1', Text('Centro, Ruta 1',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
@@ -40,7 +61,7 @@ class DomiciliosView extends StatelessWidget {
), ),
const Spacer(), const Spacer(),
IconButton( IconButton(
onPressed: () {}, // Menú de opciones onPressed: () {},
icon: const Icon(Icons.more_horiz, size: 40), icon: const Icon(Icons.more_horiz, size: 40),
), ),
], ],
@@ -48,9 +69,7 @@ class DomiciliosView extends StatelessWidget {
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
GestureDetector( GestureDetector(
onTap: () { onTap: () {},
// Acción para agregar nuevo domicilio
},
child: Container( child: Container(
width: double.infinity, width: double.infinity,
height: 100, height: 100,
@@ -64,7 +83,10 @@ class DomiciliosView extends StatelessWidget {
], ],
), ),
), ),
bottomNavigationBar: const CustomNavBar(currentIndex: 0), bottomNavigationBar: CustomNavBar(
currentIndex: 0,
onTap: (index) => _navigateTo(context, index),
),
); );
} }
} }

View File

@@ -1,10 +1,31 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'nav_bar.dart'; import 'nav_bar.dart';
import 'rutas.dart'; import 'rutas.dart';
import 'domicilios.dart';
import 'configuracion.dart';
class HorariosView extends StatelessWidget { class HorariosView extends StatelessWidget {
const HorariosView({super.key}); const HorariosView({super.key});
void _navigateTo(BuildContext context, int index) {
if (index == 1) return; // Ya estamos en Horarios
switch (index) {
case 0:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const DomiciliosView()),
);
break;
case 2:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const ConfiguracionView()),
);
break;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final List<Map<String, String>> rutas = List.generate( final List<Map<String, String>> rutas = List.generate(
@@ -50,7 +71,10 @@ class HorariosView extends StatelessWidget {
); );
}, },
), ),
bottomNavigationBar: const CustomNavBar(currentIndex: 1), bottomNavigationBar: CustomNavBar(
currentIndex: 1,
onTap: (index) => _navigateTo(context, index),
),
); );
} }
} }

View File

@@ -1,38 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'rutas.dart'; import 'rutas.dart';
import 'domicilios.dart';
import 'horarios.dart';
import 'configuracion.dart';
class CustomNavBar extends StatelessWidget { class CustomNavBar extends StatelessWidget {
final int currentIndex; final int currentIndex;
final Function(int) onTap;
const CustomNavBar({super.key, required this.currentIndex}); const CustomNavBar({
super.key,
void _navigateTo(BuildContext context, int index) { required this.currentIndex,
if (currentIndex == index) return; required this.onTap,
});
Widget destino;
switch (index) {
case 0:
destino = const DomiciliosView();
break;
case 1:
destino = const HorariosView();
break;
case 2:
destino = const ConfiguracionView();
break;
default:
return;
}
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => destino),
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -44,32 +21,32 @@ class CustomNavBar extends StatelessWidget {
children: [ children: [
// BOTÓN DOMICILIOS // BOTÓN DOMICILIOS
_buildNavButton( _buildNavButton(
context: context,
index: 0, index: 0,
currentIndex: currentIndex, currentIndex: currentIndex,
iconNormal: Icons.home_outlined, iconNormal: Icons.home_outlined,
iconActive: Icons.home, iconActive: Icons.home,
label: 'Domicilios', label: 'Domicilios',
onTap: onTap,
), ),
// BOTÓN RUTAS (HORARIOS) // BOTÓN RUTAS (HORARIOS)
_buildNavButton( _buildNavButton(
context: context,
index: 1, index: 1,
currentIndex: currentIndex, currentIndex: currentIndex,
iconNormal: Icons.alt_route_rounded, iconNormal: Icons.alt_route_rounded,
iconActive: Icons.alt_route_rounded, iconActive: Icons.alt_route_rounded,
label: 'Rutas', label: 'Rutas',
onTap: onTap,
), ),
// BOTÓN CONFIGURACIÓN // BOTÓN CONFIGURACIÓN
_buildNavButton( _buildNavButton(
context: context,
index: 2, index: 2,
currentIndex: currentIndex, currentIndex: currentIndex,
iconNormal: Icons.settings_outlined, iconNormal: Icons.settings_outlined,
iconActive: Icons.settings, iconActive: Icons.settings,
label: 'Configuración', label: 'Configuración',
onTap: onTap,
), ),
], ],
), ),
@@ -77,29 +54,27 @@ class CustomNavBar extends StatelessWidget {
} }
Widget _buildNavButton({ Widget _buildNavButton({
required BuildContext context,
required int index, required int index,
required int currentIndex, required int currentIndex,
required IconData iconNormal, required IconData iconNormal,
required IconData iconActive, required IconData iconActive,
required String label, required String label,
required Function(int) onTap,
}) { }) {
final bool isActive = currentIndex == index; final bool isActive = currentIndex == index;
return Expanded( return Expanded(
child: GestureDetector( child: GestureDetector(
onTap: () => _navigateTo(context, index), onTap: () => onTap(index),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
// ÍCONO: más grande si está activo
Icon( Icon(
isActive ? iconActive : iconNormal, isActive ? iconActive : iconNormal,
color: Colors.white, color: Colors.white,
size: isActive ? 55 : 35, // ¡EL ACTIVO ES MÁS GRANDE! size: isActive ? 55 : 35,
), ),
const SizedBox(height: 5), const SizedBox(height: 5),
// TEXTO: opcional, para mejor UX
Text( Text(
label, label,
style: TextStyle( style: TextStyle(