import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:injectable/injectable.dart'; import '../../../domain/outlet/outlet.dart'; import '../../../infrastructure/outlet/datasource/local_data_provider.dart'; part 'selected_outlet_event.dart'; part 'selected_outlet_state.dart'; part 'selected_outlet_bloc.freezed.dart'; @injectable class SelectedOutletBloc extends Bloc { final OutletLocalDataProvider _localDataProvider; SelectedOutletBloc(this._localDataProvider) : super(SelectedOutletState.initial()) { on(_onSelectedOutletEvent); } Future _onSelectedOutletEvent( SelectedOutletEvent event, Emitter emit, ) { return event.map( loaded: (e) async { final savedId = _localDataProvider.getSelectedOutletId(); emit(state.copyWith(selectedOutletId: savedId)); }, selected: (e) async { await _localDataProvider.saveSelectedOutletId(e.outlet.id); emit( state.copyWith( selectedOutlet: e.outlet, selectedOutletId: e.outlet.id, ), ); }, cleared: (e) async { await _localDataProvider.deleteSelectedOutletId(); emit(SelectedOutletState.initial()); }, ); } }