Actualizacion del programa

This commit is contained in:
2026-05-23 01:40:39 -06:00
parent 458af32fcf
commit c6a1a67469
132 changed files with 11009 additions and 168 deletions

View File

@@ -1,3 +1,4 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../core/app_colors.dart';
@@ -8,6 +9,10 @@ import '../../models/models.dart';
import '../../data/routes_data.dart';
import '../../models/route_model.dart' show ColonyModel;
import 'create_route_screen.dart';
import 'admin_stats_screen.dart';
import 'manage_conductors_screen.dart';
import 'export_pdf_screen.dart';
import '../../screens/settings_screen.dart';
import '../../widgets/route_map_widget.dart';
class AdminDashboardScreen extends StatefulWidget {
@@ -27,6 +32,7 @@ class _AdminDashboardScreenState extends State<AdminDashboardScreen> {
_AdminHomeTab(sim:sim, auth:auth),
_AdminMapTab(sim:sim),
_AdminReportesTab(),
_AdminConductoresTab(),
_AdminAssignmentsTab(),
_AdminAlertasTab(sim:sim),
_AdminRoutesTab(),
@@ -136,6 +142,15 @@ class _AdminHomeTabState extends State<_AdminHomeTab> {
child: Container(height: 4, color: AppColors.dorado)),
title: const Text('Panel Administrador', style: TextStyle(fontWeight: FontWeight.bold)),
actions: [
IconButton(icon: const Icon(Icons.picture_as_pdf), tooltip: 'Exportar PDF',
onPressed: () => Navigator.push(context,
MaterialPageRoute(builder: (_) => const ExportPdfScreen()))),
IconButton(icon: const Icon(Icons.bar_chart), tooltip: 'Estadisticas',
onPressed: () => Navigator.push(context,
MaterialPageRoute(builder: (_) => const AdminStatsScreen()))),
IconButton(icon: const Icon(Icons.settings_outlined), tooltip: 'Configuracion',
onPressed: () => Navigator.push(context,
MaterialPageRoute(builder: (_) => const SettingsScreen()))),
IconButton(icon: const Icon(Icons.refresh), onPressed: _load),
IconButton(icon: const Icon(Icons.logout),
onPressed: () async { await widget.auth.logout();
@@ -431,6 +446,7 @@ class _AdminReportesTabState extends State<_AdminReportesTab> {
final routeId = r['route_id']??'';
final estado = r['estado']??'PENDIENTE';
final id = r['id'] as int?;
final fotoPath = r['foto_path'] as String?;
return Card(margin:const EdgeInsets.only(bottom:8),
child:Padding(padding:const EdgeInsets.all(12),child:Column(
crossAxisAlignment:CrossAxisAlignment.start, children:[
@@ -455,6 +471,12 @@ class _AdminReportesTabState extends State<_AdminReportesTab> {
const SizedBox(height:6),
Text(_tipos[tipo]??tipo,style:const TextStyle(fontWeight:FontWeight.w600,fontSize:13)),
Text(r['descripcion']??'',style:const TextStyle(fontSize:12,color:AppColors.grisTexto)),
if (fotoPath != null && fotoPath.isNotEmpty) ...[
const SizedBox(height:6),
ClipRRect(borderRadius:BorderRadius.circular(6),
child:Image.file(File(fotoPath), height:100, width:double.infinity,
fit:BoxFit.cover)),
],
const SizedBox(height:6),
Row(children:[
Text(''*calif,style:const TextStyle(fontSize:11)),
@@ -793,6 +815,25 @@ class _AdminBanner extends StatelessWidget {
]))));
}
// ── TAB Conductores (delega a ManageConductorsScreen) ────────────────────
class _AdminConductoresTab extends StatelessWidget {
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(automaticallyImplyLeading: false,
backgroundColor: AppColors.verdeAdmin, foregroundColor: Colors.white,
title: const Text('Gestión de Conductores'),
bottom: PreferredSize(preferredSize: const Size.fromHeight(4),
child: Container(height: 4, color: AppColors.dorado)),
actions: [
IconButton(icon: const Icon(Icons.open_in_full),
tooltip: 'Ver en pantalla completa',
onPressed: () => Navigator.push(context,
MaterialPageRoute(builder: (_) => const ManageConductorsScreen()))),
]),
body: const ManageConductorsScreen());
}
// ── TAB 6: Gestión de Rutas ───────────────────────────────────────────────
class _AdminRoutesTab extends StatefulWidget {
@override State<_AdminRoutesTab> createState() => _AdminRoutesTabState();