simulacion de estados y flujo de notificacion, modificacion de estilos en todas las vistas

This commit is contained in:
shinra32
2026-05-23 07:08:49 -06:00
parent ca076607c7
commit 92f570294a
43 changed files with 4335 additions and 2035 deletions

View File

@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../core/network/api_client.dart';
import '../models/admin_driver.dart';
import '../models/admin_incident.dart';
import '../models/admin_route.dart';
import '../models/admin_unit.dart';
import '../models/admin_user.dart';
@@ -188,4 +189,42 @@ class AdminService {
Future<void> deleteDriver(String id) async {
await _dio.delete<void>('/admin/drivers/$id');
}
// ── Incidents ────────────────────────────────────────────────────────────────
Future<List<AdminIncidentModel>> listIncidentsByUnit(int unitId) async {
final res = await _dio.get<List<dynamic>>('/admin/units/$unitId/incidents');
return (res.data ?? [])
.whereType<Map>()
.map((e) => AdminIncidentModel.fromJson(Map<String, dynamic>.from(e)))
.toList();
}
Future<AdminIncidentModel> createIncident({
required int unitId,
required String type,
String? description,
}) async {
final res = await _dio.post<Map<String, dynamic>>(
'/admin/units/$unitId/incidents',
data: {
'unit_id': unitId,
'type': type,
if (description != null && description.isNotEmpty)
'description': description,
},
);
return AdminIncidentModel.fromJson(res.data!);
}
// ── Simulación ──────────────────────────────────────────────────────────────
/// Avanza una vez la simulación (`positionId += 1` en todas las rutas) y
/// dispara los push FCM correspondientes. Devuelve los eventos disparados.
Future<List<Map<String, dynamic>>> simulationTick() async {
final res = await _dio.post<Map<String, dynamic>>('/simulation/tick');
final events = (res.data?['events'] as List?) ?? const [];
return events
.whereType<Map>()
.map((e) => Map<String, dynamic>.from(e))
.toList();
}
}