Actualizacion de mejoras
This commit is contained in:
@@ -71,14 +71,14 @@ class _DriverHomeScreenState extends State<DriverHomeScreen> {
|
||||
selectedIndex: _tab,
|
||||
onDestinationSelected: (i) => setState(()=>_tab=i),
|
||||
backgroundColor: Colors.white,
|
||||
indicatorColor: AppColors.moradoConductor.withOpacity(0.15),
|
||||
indicatorColor: AppColors.guindaPrimary.withOpacity(0.15),
|
||||
destinations: const [
|
||||
NavigationDestination(icon:Icon(Icons.dashboard_outlined),
|
||||
selectedIcon:Icon(Icons.dashboard,color:AppColors.moradoConductor),label:'Mi Ruta'),
|
||||
selectedIcon:Icon(Icons.dashboard,color:AppColors.guindaPrimary),label:'Mi Ruta'),
|
||||
NavigationDestination(icon:Icon(Icons.map_outlined),
|
||||
selectedIcon:Icon(Icons.map,color:AppColors.moradoConductor),label:'Mapa'),
|
||||
selectedIcon:Icon(Icons.map,color:AppColors.guindaPrimary),label:'Mapa'),
|
||||
NavigationDestination(icon:Icon(Icons.report_problem_outlined),
|
||||
selectedIcon:Icon(Icons.report_problem,color:AppColors.moradoConductor),label:'Incidente'),
|
||||
selectedIcon:Icon(Icons.report_problem,color:AppColors.guindaPrimary),label:'Incidente'),
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -114,7 +114,7 @@ class _DriverMainTabState extends State<_DriverMainTab> {
|
||||
? widget.sim.isGpsActive(widget.todayRouteId!) : true;
|
||||
|
||||
return CustomScrollView(slivers:[
|
||||
SliverAppBar(pinned:true, backgroundColor:AppColors.moradoConductor, foregroundColor:Colors.white,
|
||||
SliverAppBar(pinned:true, backgroundColor:AppColors.guindaPrimary, foregroundColor:Colors.white,
|
||||
bottom:PreferredSize(preferredSize:const Size.fromHeight(4),
|
||||
child:Container(height:4,color:AppColors.dorado)),
|
||||
title:Text('Conductor: ${widget.auth.currentUser?.nombre.split(' ').first ?? ''}',
|
||||
@@ -125,16 +125,16 @@ class _DriverMainTabState extends State<_DriverMainTab> {
|
||||
|
||||
SliverPadding(padding:const EdgeInsets.all(14),sliver:SliverList(delegate:SliverChildListDelegate([
|
||||
// Ruta de hoy
|
||||
Card(color:AppColors.moradoConductor.withOpacity(0.08),
|
||||
Card(color:AppColors.guindaPrimary.withOpacity(0.08),
|
||||
shape:RoundedRectangleBorder(borderRadius:BorderRadius.circular(12),
|
||||
side:BorderSide(color:AppColors.moradoConductor.withOpacity(0.3))),
|
||||
side:BorderSide(color:AppColors.guindaPrimary.withOpacity(0.3))),
|
||||
child:Padding(padding:const EdgeInsets.all(14),child:Column(
|
||||
crossAxisAlignment:CrossAxisAlignment.start, children:[
|
||||
Row(children:[
|
||||
const Icon(Icons.today,color:AppColors.moradoConductor),
|
||||
const Icon(Icons.today,color:AppColors.guindaPrimary),
|
||||
const SizedBox(width:8),
|
||||
Text('Hoy — ${_todayLabel()}',
|
||||
style:const TextStyle(fontWeight:FontWeight.bold,color:AppColors.moradoConductor,fontSize:15)),
|
||||
style:const TextStyle(fontWeight:FontWeight.bold,color:AppColors.guindaPrimary,fontSize:15)),
|
||||
]),
|
||||
const Divider(),
|
||||
if (widget.route != null)...[
|
||||
@@ -155,7 +155,7 @@ class _DriverMainTabState extends State<_DriverMainTab> {
|
||||
const SizedBox(height:8),
|
||||
LinearProgressIndicator(value:(posIdx+1)/8,
|
||||
backgroundColor:Colors.grey.shade300,
|
||||
valueColor:const AlwaysStoppedAnimation<Color>(AppColors.moradoConductor)),
|
||||
valueColor:const AlwaysStoppedAnimation<Color>(AppColors.guindaPrimary)),
|
||||
const SizedBox(height:6),
|
||||
Text(widget.sim.getEtaText(widget.todayRouteId??''),
|
||||
style:const TextStyle(fontSize:13,fontWeight:FontWeight.w500)),
|
||||
@@ -168,7 +168,7 @@ class _DriverMainTabState extends State<_DriverMainTab> {
|
||||
Card(child:Padding(padding:const EdgeInsets.all(12),child:Column(
|
||||
crossAxisAlignment:CrossAxisAlignment.start, children:[
|
||||
const Text('📋 Instrucciones de Ruta',
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.moradoConductor)),
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.guindaPrimary)),
|
||||
const Divider(),
|
||||
const Text('• Sigue la ruta asignada sin desviaciones\n'
|
||||
'• Mantén el GPS activo en todo momento\n'
|
||||
@@ -208,7 +208,7 @@ class _DriverMainTabState extends State<_DriverMainTab> {
|
||||
Card(child:Padding(padding:const EdgeInsets.all(12),child:Column(
|
||||
crossAxisAlignment:CrossAxisAlignment.start, children:[
|
||||
const Text('Mi Horario',
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.moradoConductor)),
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.guindaPrimary)),
|
||||
const Divider(),
|
||||
if (widget.assignments.isEmpty)
|
||||
const Text('Sin asignaciones. Contacta al administrador.',
|
||||
@@ -232,16 +232,16 @@ class _DriverMainTabState extends State<_DriverMainTab> {
|
||||
try { found = all.firstWhere((a)=>a.diaSemana==dia); break; } catch(_){}
|
||||
}
|
||||
return Container(padding:const EdgeInsets.all(10),
|
||||
decoration:BoxDecoration(color:AppColors.moradoConductor.withOpacity(0.06),
|
||||
decoration:BoxDecoration(color:AppColors.guindaPrimary.withOpacity(0.06),
|
||||
borderRadius:BorderRadius.circular(8),
|
||||
border:Border.all(color:AppColors.moradoConductor.withOpacity(0.2))),
|
||||
border:Border.all(color:AppColors.guindaPrimary.withOpacity(0.2))),
|
||||
child:Row(children:[
|
||||
const Icon(Icons.calendar_today,size:14,color:AppColors.moradoConductor),
|
||||
const Icon(Icons.calendar_today,size:14,color:AppColors.guindaPrimary),
|
||||
const SizedBox(width:6),
|
||||
Expanded(child:Text(label,style:const TextStyle(fontWeight:FontWeight.w600,fontSize:12))),
|
||||
if (found!=null)
|
||||
Container(padding:const EdgeInsets.symmetric(horizontal:8,vertical:3),
|
||||
decoration:BoxDecoration(color:AppColors.moradoConductor,borderRadius:BorderRadius.circular(8)),
|
||||
decoration:BoxDecoration(color:AppColors.guindaPrimary,borderRadius:BorderRadius.circular(8)),
|
||||
child:Text('${found.routeId} • ${found.turno}',
|
||||
style:const TextStyle(fontSize:11,color:Colors.white,fontWeight:FontWeight.bold)))
|
||||
else
|
||||
@@ -262,7 +262,7 @@ class _DriverMapTab extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
appBar:AppBar(automaticallyImplyLeading:false,
|
||||
backgroundColor:AppColors.moradoConductor,foregroundColor:Colors.white,
|
||||
backgroundColor:AppColors.guindaPrimary,foregroundColor:Colors.white,
|
||||
title:Text(route.name,style:const TextStyle(fontSize:13)),
|
||||
bottom:PreferredSize(preferredSize:const Size.fromHeight(4),
|
||||
child:Container(height:4,color:AppColors.dorado))),
|
||||
@@ -333,7 +333,7 @@ class _DriverReportesTabState extends State<_DriverReportesTab> {
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
backgroundColor:AppColors.grisFondo,
|
||||
appBar:AppBar(automaticallyImplyLeading:false,
|
||||
backgroundColor:AppColors.moradoConductor,foregroundColor:Colors.white,
|
||||
backgroundColor:AppColors.guindaPrimary,foregroundColor:Colors.white,
|
||||
title:const Text('Reportar Incidente'),
|
||||
bottom:PreferredSize(preferredSize:const Size.fromHeight(4),
|
||||
child:Container(height:4,color:AppColors.dorado))),
|
||||
@@ -349,14 +349,14 @@ class _DriverReportesTabState extends State<_DriverReportesTab> {
|
||||
if (widget.todayRouteId != null)
|
||||
Container(margin:const EdgeInsets.only(bottom:12),
|
||||
padding:const EdgeInsets.all(10),
|
||||
decoration:BoxDecoration(color:AppColors.moradoConductor.withOpacity(0.08),
|
||||
decoration:BoxDecoration(color:AppColors.guindaPrimary.withOpacity(0.08),
|
||||
borderRadius:BorderRadius.circular(8),
|
||||
border:Border.all(color:AppColors.moradoConductor.withOpacity(0.3))),
|
||||
border:Border.all(color:AppColors.guindaPrimary.withOpacity(0.3))),
|
||||
child:Row(children:[
|
||||
const Icon(Icons.route,color:AppColors.moradoConductor,size:16),
|
||||
const Icon(Icons.route,color:AppColors.guindaPrimary,size:16),
|
||||
const SizedBox(width:6),
|
||||
Text('Incidente en: ${widget.todayRouteId}',
|
||||
style:const TextStyle(fontWeight:FontWeight.bold,color:AppColors.moradoConductor,fontSize:13)),
|
||||
style:const TextStyle(fontWeight:FontWeight.bold,color:AppColors.guindaPrimary,fontSize:13)),
|
||||
]))
|
||||
else
|
||||
Container(margin:const EdgeInsets.only(bottom:12),
|
||||
@@ -369,12 +369,12 @@ class _DriverReportesTabState extends State<_DriverReportesTab> {
|
||||
child:Padding(padding:const EdgeInsets.all(16),child:Column(
|
||||
crossAxisAlignment:CrossAxisAlignment.start, children:[
|
||||
const Text('Tipo de incidente',
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.moradoConductor,fontSize:15)),
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.guindaPrimary,fontSize:15)),
|
||||
const SizedBox(height:8),
|
||||
..._tipos.entries.map((e)=>RadioListTile<String>(dense:true,
|
||||
value:e.key,groupValue:_tipo,
|
||||
title:Text(e.value,style:const TextStyle(fontSize:13)),
|
||||
activeColor:AppColors.moradoConductor,
|
||||
activeColor:AppColors.guindaPrimary,
|
||||
onChanged:(v)=>setState(()=>_tipo=v!))),
|
||||
const SizedBox(height:10),
|
||||
const Text('Descripción',style:TextStyle(fontWeight:FontWeight.w600,fontSize:13)),
|
||||
@@ -395,7 +395,7 @@ class _DriverReportesTabState extends State<_DriverReportesTab> {
|
||||
SizedBox(width:double.infinity,height:48,
|
||||
child:ElevatedButton.icon(
|
||||
onPressed:(_loading||widget.todayRouteId==null)?null:_enviar,
|
||||
style:ElevatedButton.styleFrom(backgroundColor:AppColors.moradoConductor,
|
||||
style:ElevatedButton.styleFrom(backgroundColor:AppColors.guindaPrimary,
|
||||
foregroundColor:Colors.white,
|
||||
shape:RoundedRectangleBorder(borderRadius:BorderRadius.circular(8))),
|
||||
icon:_loading?const SizedBox(width:18,height:18,
|
||||
@@ -408,11 +408,11 @@ class _DriverReportesTabState extends State<_DriverReportesTab> {
|
||||
const SizedBox(height:16),
|
||||
const Align(alignment:Alignment.centerLeft,
|
||||
child:Text('Mis incidentes de hoy',
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.moradoConductor,fontSize:14))),
|
||||
style:TextStyle(fontWeight:FontWeight.bold,color:AppColors.guindaPrimary,fontSize:14))),
|
||||
const SizedBox(height:8),
|
||||
..._misIncidentes.take(5).map((a)=>Card(margin:const EdgeInsets.only(bottom:6),
|
||||
child:ListTile(dense:true,
|
||||
leading:CircleAvatar(backgroundColor:AppColors.moradoConductor,radius:16,
|
||||
leading:CircleAvatar(backgroundColor:AppColors.guindaPrimary,radius:16,
|
||||
child:const Icon(Icons.warning,color:Colors.white,size:14)),
|
||||
title:Text(_tipos[a.tipo]??a.tipo,
|
||||
style:const TextStyle(fontSize:12,fontWeight:FontWeight.w600)),
|
||||
@@ -436,7 +436,7 @@ class _NotifBanner extends StatelessWidget {
|
||||
final color = notif.event==NotifEvent.gpsLost?Colors.red.shade800
|
||||
:notif.event==NotifEvent.truckStopped?AppColors.naranjaAlerta
|
||||
:notif.event==NotifEvent.routeCancelled?AppColors.rojoError
|
||||
:AppColors.moradoConductor;
|
||||
:AppColors.guindaPrimary;
|
||||
return Material(color:Colors.transparent,
|
||||
child:Container(margin:const EdgeInsets.all(10),
|
||||
decoration:BoxDecoration(color:color,borderRadius:BorderRadius.circular(12),
|
||||
|
||||
Reference in New Issue
Block a user