# Conflicts:
#	lib/presentation/navigation/app_router.dart
#	pubspec.yaml
This commit is contained in:
2026-08-11 00:14:00 +03:00
parent c9b8d143d1
commit 182be1049b
351 changed files with 24566 additions and 22898 deletions

View File

@@ -1,27 +1,78 @@
import 'package:be_happy/domain/entities/scooter.dart';
import 'package:be_happy/domain/usecase/get_scooter_by_title_usecase.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../event/scooter_code_event.dart';
import '../state/scooter_code_state.dart';
class ScooterCodeBloc extends Bloc<ScooterCodeEvent, ScooterCodeState> {
final GetScooterByTitleUsecase getScooterByTitleUsecase;
ScooterCodeBloc({required this.getScooterByTitleUsecase}) : super(const ScooterCodeInitial()) {
on<ScooterCodeChanged>((event, emit) {
emit(ScooterCodeInitial(code: event.code));
});
on<ScooterCodeSubmitted>((event, emit) async {
emit(ScooterCodeLoading(code: event.code));
final result = await getScooterByTitleUsecase(event.code);
/*result.fold(
(error) => emit(ScooterCodeFailure(error.message ?? "Ошибка", code: event.code)),
(scooter) => emit(ScooterCodeSuccess(scooter, code: event.code)),
);*/
});
}
}
import 'package:be_happy/domain/entities/scooter.dart';
import 'package:be_happy/domain/usecase/get_scooter_by_title_usecase.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:geolocator/geolocator.dart';
import 'package:yandex_mapkit/yandex_mapkit.dart';
import '../../core/result.dart';
import '../../domain/usecase/get_address_by_point_usecase.dart';
import '../../domain/usecase/get_pedestrian_routes_usecase.dart';
import '../event/scooter_code_event.dart';
import '../state/scooter_code_state.dart';
class ScooterCodeBloc extends Bloc<ScooterCodeEvent, ScooterCodeState> {
final GetScooterByTitleUsecase getScooterByTitleUsecase;
final GetAddressByPointUsecase getAddressUsecase;
final GetPedestrianRoutesUsecase getPedestrianRoutesUsecase;
ScooterCodeBloc({
required this.getScooterByTitleUsecase,
required this.getAddressUsecase,
required this.getPedestrianRoutesUsecase,
}) : super(const ScooterCodeInitial()) {
on<ScooterCodeChanged>((event, emit) {
emit(ScooterCodeInitial(code: event.code));
});
on<ScooterCodeSubmitted>((event, emit) async {
emit(ScooterCodeLoading(code: event.code));
final result = await getScooterByTitleUsecase(event.code);
switch (result) {
case Success(:final data):
if (data != null) {
final String currentAddress = await getAddressUsecase(
data.longitude,
data.latitude,
);
final position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high,
);
final routes = await getPedestrianRoutesUsecase(
Point(latitude: position.latitude, longitude: position.longitude),
Point(latitude: data.longitude, longitude: data.latitude),
);
final distance =
routes?.firstOrNull?.metadata.weight.walkingDistance.value;
print("Distance is: $distance");
final time = routes?.firstOrNull?.metadata.weight.time.value;
data.distance = distance;
data.timeToTravel = time;
emit(
ScooterCodeSuccess(
data,
code: event.code,
address: currentAddress,
distance: distance ?? 0.0,
),
);
} else {
emit(ScooterCodeFailure("Самокат не найден", code: event.code));
}
case Failure(:final failure):
emit(
ScooterCodeFailure(
failure.message ?? "Неизвестная ошибка",
code: event.code,
),
);
}
});
}
}