Paginas creadas wip

This commit is contained in:
Abraham
2025-07-17 14:42:01 -07:00
parent 14a680547c
commit ca7735e2b0
13 changed files with 2971 additions and 6 deletions

View File

@@ -137,6 +137,7 @@ class EmpresasNegociosProvider extends ChangeNotifier {
? "${supabaseLU.supabaseUrl}/storage/v1/object/public/nethive/imagenes/${negocio.imagenUrl}?${DateTime.now().millisecondsSinceEpoch}"
: '',
),
'acceder_infraestructura': PlutoCell(value: negocio.id),
'editar': PlutoCell(value: negocio.id),
'eliminar': PlutoCell(value: negocio.id),
'ver_componentes': PlutoCell(value: negocio.id),

View File

@@ -0,0 +1,128 @@
import 'package:flutter/material.dart';
import 'package:nethive_neo/models/nethive/negocio_model.dart';
import 'package:nethive_neo/models/nethive/empresa_model.dart';
import 'package:nethive_neo/helpers/globals.dart';
class NavigationProvider extends ChangeNotifier {
// Estados principales
String? _negocioSeleccionadoId;
Negocio? _negocioSeleccionado;
Empresa? _empresaSeleccionada;
int _selectedMenuIndex = 0;
// Getters
String? get negocioSeleccionadoId => _negocioSeleccionadoId;
Negocio? get negocioSeleccionado => _negocioSeleccionado;
Empresa? get empresaSeleccionada => _empresaSeleccionada;
int get selectedMenuIndex => _selectedMenuIndex;
// Lista de opciones del sidemenu
final List<NavigationMenuItem> menuItems = [
NavigationMenuItem(
title: 'Dashboard',
icon: Icons.dashboard,
route: '/dashboard',
index: 0,
),
NavigationMenuItem(
title: 'Inventario',
icon: Icons.inventory_2,
route: '/inventario',
index: 1,
),
NavigationMenuItem(
title: 'Topología',
icon: Icons.account_tree,
route: '/topologia',
index: 2,
),
NavigationMenuItem(
title: 'Alertas',
icon: Icons.warning,
route: '/alertas',
index: 3,
),
NavigationMenuItem(
title: 'Configuración',
icon: Icons.settings,
route: '/configuracion',
index: 4,
),
NavigationMenuItem(
title: 'Empresas',
icon: Icons.business,
route: '/empresas',
index: 5,
isSpecial: true, // Para diferenciarlo como opción de regreso
),
];
// Métodos para establecer el negocio seleccionado
Future<void> setNegocioSeleccionado(String negocioId) async {
try {
_negocioSeleccionadoId = negocioId;
// Obtener datos completos del negocio
final negocioResponse = await supabaseLU.from('negocio').select('''
*,
empresa!inner(*)
''').eq('id', negocioId).single();
_negocioSeleccionado = Negocio.fromMap(negocioResponse);
_empresaSeleccionada = Empresa.fromMap(negocioResponse['empresa']);
// Reset menu selection when changing business
_selectedMenuIndex = 0;
notifyListeners();
} catch (e) {
print('Error al establecer negocio seleccionado: $e');
}
}
// Método para cambiar la selección del menú
void setSelectedMenuIndex(int index) {
_selectedMenuIndex = index;
notifyListeners();
}
// Método para limpiar la selección (al regresar a empresas)
void clearSelection() {
_negocioSeleccionadoId = null;
_negocioSeleccionado = null;
_empresaSeleccionada = null;
_selectedMenuIndex = 0;
notifyListeners();
}
// Método para obtener el item del menú por índice
NavigationMenuItem getMenuItemByIndex(int index) {
return menuItems.firstWhere((item) => item.index == index);
}
// Método para obtener el item del menú por ruta
NavigationMenuItem? getMenuItemByRoute(String route) {
try {
return menuItems.firstWhere((item) => item.route == route);
} catch (e) {
return null;
}
}
}
// Modelo para los items del menú
class NavigationMenuItem {
final String title;
final IconData icon;
final String route;
final int index;
final bool isSpecial;
NavigationMenuItem({
required this.title,
required this.icon,
required this.route,
required this.index,
this.isSpecial = false,
});
}