import 'package:flutter/cupertino.dart'; import 'package:hl_lieferservice/feature/authentication/bloc/auth_event.dart'; import 'package:hl_lieferservice/feature/authentication/bloc/auth_state.dart'; import 'package:hl_lieferservice/feature/authentication/service/userinfo.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hl_lieferservice/main.dart'; import 'package:hl_lieferservice/widget/operations/bloc/operation_bloc.dart'; import 'package:hl_lieferservice/widget/operations/bloc/operation_event.dart'; class AuthBloc extends Bloc { UserInfoService service; OperationBloc operationBloc; AuthBloc({required this.service, required this.operationBloc}) : super(Unauthenticated()) { on(_auth); on(_logout); on(_sessionExpired); } Future _auth( SetAuthenticatedEvent event, Emitter emit, ) async { try { debugPrint("Retrieve user information"); var response = await service.getUserinfo(event.sessionId); var state = Authenticated(sessionId: event.sessionId, user: response); locator.registerSingleton(state); emit(state); } catch (err, st) { debugPrint("Failed to retrieve user information"); debugPrint(err.toString()); debugPrint(st.toString()); operationBloc.add( FailOperation( message: "Login war nicht erfolgreich. Probieren Sie es erneut.", ), ); } } Future _logout(Logout event, Emitter emit) async { if (locator.isRegistered()) { locator.unregister(); } emit(Unauthenticated()); } Future _sessionExpired( SessionExpiredEvent event, Emitter emit, ) async { if (locator.isRegistered()) { locator.unregister(); } emit(Unauthenticated(sessionExpired: true)); } }