Line data Source code
1 : import 'dart:async'; 2 : 3 : import 'package:tech_proof/core/error/global_error_bus.dart'; 4 : 5 : import 'package:equatable/equatable.dart'; 6 : import 'package:flutter_bloc/flutter_bloc.dart'; 7 : 8 : part 'app_event.dart'; 9 : part 'app_state.dart'; 10 : 11 : class AppBloc extends Bloc<AppEvent, AppState> { 12 : late final StreamSubscription _errorSub; 13 3 : AppBloc() : super(AppInitial()) { 14 4 : _errorSub = GlobalErrorBus.stream.listen((appError) { 15 2 : add(AppErrorReceived(appError)); 16 : }); 17 : 18 2 : on<AppErrorReceived>(_onErrorReceived); 19 : } 20 : 21 1 : void _onErrorReceived(AppErrorReceived event, Emitter<AppState> emit) { 22 1 : final error = event.error; 23 : 24 1 : switch (error.type) { 25 1 : case "unauthorized": 26 3 : emit(AppSessionExpired(error.message)); 27 : break; 28 1 : case "network": 29 3 : emit(AppNetworkError(error.message)); 30 : break; 31 1 : case "server_error": 32 3 : emit(AppServerError(error.message)); 33 : break; 34 : default: 35 3 : emit(AppUnknownError(error.message)); 36 : } 37 : } 38 : 39 1 : @override 40 : Future<void> close() { 41 2 : _errorSub.cancel(); 42 1 : return super.close(); 43 : } 44 : }