find_bloc

 avatar
unknown
dart
5 months ago
2.9 kB
2
Indexable
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../domain/entities/charger_station.dart';
import '../../domain/usecases/get_charge_stations.dart';
import '../../domain/usecases/get_favorite_charge_stations.dart';
import '../../domain/usecases/load_markers.dart';
import '../../domain/usecases/open_maps_navigation.dart';

part 'find_state.dart';
part 'find_event.dart';

class FindBloc extends Bloc<FindEvent, FindState> {
  FindBloc({
    required GetChargeStations getChargeStations,
    required OpenMapsNavigation openMapsNavigation,
    required LoadMarkers loadMarkers,
    required GetFavoriteChargeStations getFavoriteChargeStations,
  })  : _getChargeStations = getChargeStations,
        _openMapsNavigation = openMapsNavigation,
        _loadMarkers = loadMarkers,
        _getFavoriteChargeStations = getFavoriteChargeStations,
        super(const FindInitial()) {
    on<FindEvent>((event, emit) {
      emit(const FindLoading());
    });
    on<GetChargeStationsEvent>(_getChargeStationsHandler);
    on<OpenMapsNavigationEvent>(_openMapsNavigationHandler);
    on<LoadMarkersEvent>(_loadMarkersHandler);
    on<GetFavoriteChargeStationsEvent>(_getFavoriteChargeStationsHandler);
  }

  final GetChargeStations _getChargeStations;
  final OpenMapsNavigation _openMapsNavigation;
  final LoadMarkers _loadMarkers;
  final GetFavoriteChargeStations _getFavoriteChargeStations;

  Future<void> _getChargeStationsHandler(
    GetChargeStationsEvent event,
    Emitter<FindState> emit,
  ) async {
    final result = await _getChargeStations();
    result.fold(
        (failure) =>
            emit(GetChargeStationsError(failure.message, failure.statusCode)),
        (chargeStations) => emit(ChargeStationsLoaded(chargeStations)));
  }

  Future<void> _openMapsNavigationHandler(
    OpenMapsNavigationEvent event,
    Emitter<FindState> emit,
  ) async {
    final result = await _openMapsNavigation(event.coordinates);
    result.fold((failure) => emit(FindError(failure.message)),
        (_) => emit(const OpenMapsNavigationSuccess()));
  }

  Future<void> _loadMarkersHandler(
    LoadMarkersEvent event,
    Emitter<FindState> emit,
  ) async {
    final result = await _loadMarkers(event.chargerStations);
    result.fold((failure) => emit(FindError(failure.message)),
        (markers) => emit(MarkersLoaded(markers)));
  }

  Future<void> _getFavoriteChargeStationsHandler(
    GetFavoriteChargeStationsEvent event,
    Emitter<FindState> emit,
  ) async {
    final result = await _getFavoriteChargeStations(event.userId);
    result.fold(
        (failure) => emit(GetFavoriteChargeStationsError(
            failure.message, failure.statusCode)),
        (chargeStations) => emit(FavoriteChargeStationsLoaded(chargeStations)));
  }
}
Editor is loading...
Leave a Comment