bug fixes

This commit is contained in:
2026-09-04 13:41:57 +03:00
parent cf5b56e365
commit 5f57af2ad2
14 changed files with 201 additions and 89 deletions

View File

@@ -34,6 +34,7 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
final LogoutUseCase logoutUseCase;
final SplashBloc splashBloc;
StreamSubscription<ClientNotification>? _notificationSubscription;
Timer? _ordersTimer;
Future<List<Zone>>? _zonesFuture;
@@ -58,6 +59,7 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
on<FocusOnScooter>(_onFocusOnScooter);
on<ClearMapPlacemarks>(_onClearMapPlacemarks);
on<ClearMapFocus>(_onClearMapFocus);
on<FetchActiveOrders>(_onFetchActiveOrders);
}
Future<List<Zone>> _getZones() async {
@@ -344,4 +346,50 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
selectedScooterForFocus: null,
));
}
void _startOrdersTimer() {
_ordersTimer?.cancel();
// Опрашиваем раз в 15 секунд, если есть активные поездки
_ordersTimer = Timer.periodic(const Duration(seconds: 15), (_) {
add(FetchActiveOrders());
});
}
void _stopOrdersTimer() {
_ordersTimer?.cancel();
_ordersTimer = null;
}
Future<void> _onFetchActiveOrders(
FetchActiveOrders event,
Emitter<ScooterState> emit,
) async {
try {
final result = await getClientOrdersUsecase();
if (result is Success<List<ScooterOrder>>) {
final activeOrders = result.data ?? [];
final count = activeOrders.length;
// Управляем таймером в зависимости от наличия активных поездок
if (count > 0 && (_ordersTimer == null || !_ordersTimer!.isActive)) {
_startOrdersTimer();
} else if (count == 0) {
_stopOrdersTimer();
}
emit(state.copyWith(
activeRidesCount: count,
reservedScooters: activeOrders.map((e) => e.scooter).toList(),
));
}
} catch (e) {
print("Error fetching active orders: $e");
}
}
@override
Future<void> close() {
_stopOrdersTimer();
return super.close();
}
}