fix functional bugs

This commit is contained in:
2026-05-29 11:40:55 +03:00
parent 591265a7fc
commit 134ffdde60
50 changed files with 1086 additions and 771 deletions

View File

@@ -5,6 +5,7 @@ import 'package:be_happy/domain/entities/client_notification.dart';
import 'package:be_happy/domain/entities/map_settings.dart';
import 'package:be_happy/domain/usecase/check_user_usecase.dart';
import 'package:be_happy/domain/usecase/get_available_zones_usecase.dart';
import 'package:be_happy/domain/usecase/get_client_orders_usecase.dart';
import 'package:be_happy/domain/usecase/get_map_settings_usecase.dart';
import 'package:be_happy/domain/usecase/get_notifications_stream_usecase.dart';
import 'package:be_happy/domain/usecase/logout_usecase.dart';
@@ -13,6 +14,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import '../../domain/entities/point.dart';
import '../../domain/entities/scooter.dart';
import '../../domain/entities/scooter_order.dart';
import '../../domain/entities/zone.dart';
import '../../domain/usecase/get_available_scooters_usecase.dart';
import '../../domain/usecase/get_profile_usecase.dart';
@@ -23,6 +25,7 @@ import 'package:maps_toolkit/maps_toolkit.dart' as mt;
class MapBloc extends Bloc<ScooterEvent, ScooterState> {
final GetAvailableScootersUsecase getScootersUsecase;
final GetClientOrdersUsecase getClientOrdersUsecase;
final GetAvailableZonesUsecase getAvailableZonesUsecase;
final GetMapSettingsUsecase getMapSettingsUsecase;
final GetNotificationsStreamUseCase getNotificationsStreamUseCase;
@@ -35,6 +38,7 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
MapBloc(
this.getAvailableZonesUsecase,
this.getScootersUsecase,
this.getClientOrdersUsecase,
this.getMapSettingsUsecase,
this.getNotificationsStreamUseCase,
this.getProfileUseCase,
@@ -49,6 +53,9 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
on<FetchProfileData>(_onFetchProfileData);
on<CheckUser>(_onCheckUser);
on<LogoutPressed>(_onLogoutPressed);
on<FocusOnScooter>(_onFocusOnScooter);
on<ClearMapPlacemarks>(_onClearMapPlacemarks);
on<ClearMapFocus>(_onClearMapFocus);
}
void startNotificationStream() {
@@ -97,11 +104,15 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
getScootersUsecase(event.areaScooters, 0, 100),
getAvailableZonesUsecase(event.area, 0, 100),
getMapSettingsUsecase(),
getClientOrdersUsecase(),
]);
final scooters = results[0] as List<Scooter>;
final zones = results[1] as List<Zone>;
final settings = results[2] as MapSettings;
final orders = results[3];
zones.forEach(print);
@@ -127,6 +138,7 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
state.copyWith(
status: ScooterStatus.success,
scooters: scooters,
// reservedScooters: reservedScooters,
zones: filteredZones,
area: event.area,
areaScooters: event.areaScooters,
@@ -236,7 +248,9 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
try {
final profile = await getProfileUseCase();
emit(state.copyWith(phoneNumber: profile.phone, balance: profile.balance));
emit(
state.copyWith(phoneNumber: profile.phone, balance: profile.balance),
);
} catch (e) {
emit(
state.copyWith(
@@ -280,4 +294,52 @@ class MapBloc extends Bloc<ScooterEvent, ScooterState> {
);
}
}
FutureOr<void> _onFocusOnScooter(FocusOnScooter event, Emitter<ScooterState> emit) {
final updatedReserved = List<Scooter>.from(state.reservedScooters ?? []);
if (!updatedReserved.any((s) => s.id == event.scooter.id)) {
updatedReserved.add(event.scooter);
}
emit(state.copyWith(
selectedScooterForFocus: event.scooter,
reservedScooters: updatedReserved,
));
}
FutureOr<void> _onClearMapPlacemarks(ClearMapPlacemarks event, Emitter<ScooterState> emit) async {
try{
final orders = await getClientOrdersUsecase();
List<Scooter> updatedReservedScooters = [];
if (orders is Success<List<ScooterOrder>>) {
print("FETCH: orders.data.length = ${orders.data?.length}");
updatedReservedScooters = orders.data?.map((order) {
return order.scooter;
}).toList() ?? [];
}
emit(state.copyWith(
reservedScooters: updatedReservedScooters,
));
} catch (e) {
print("Error in _onClearMapPlacemarks: $e");
emit(state.copyWith(
status: ScooterStatus.failure,
errorMessage: e.toString(),
));
}
}
FutureOr<void> _onClearMapFocus(ClearMapFocus event, Emitter<ScooterState> emit) {
emit(state.copyWith(
selectedScooterForFocus: null,
));
}
}