home_auth_bloc.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import 'package:app_flowy/workspace/domain/i_user.dart';
  2. import 'package:freezed_annotation/freezed_annotation.dart';
  3. import 'package:flutter_bloc/flutter_bloc.dart';
  4. import 'package:dartz/dartz.dart';
  5. part 'home_auth_bloc.freezed.dart';
  6. class HomeAuthBloc extends Bloc<HomeAuthEvent, HomeAuthState> {
  7. final IUserWatch watch;
  8. HomeAuthBloc(this.watch) : super(const HomeAuthState.loading());
  9. @override
  10. Stream<HomeAuthState> mapEventToState(
  11. HomeAuthEvent event,
  12. ) async* {
  13. yield* event.map(
  14. started: (_) async* {
  15. watch.setAuthCallback(_authStateChanged);
  16. watch.startWatching();
  17. },
  18. stop: (_) async* {},
  19. unauthorized: (e) async* {
  20. yield HomeAuthState.unauthorized(e.msg);
  21. },
  22. );
  23. }
  24. @override
  25. Future<void> close() async {
  26. await watch.stopWatching();
  27. super.close();
  28. }
  29. void _authStateChanged(Either<Unit, UserError> errorOrNothing) {
  30. errorOrNothing.fold((_) {}, (error) {
  31. if (error.code == ErrorCode.UserUnauthorized) {
  32. add(HomeAuthEvent.unauthorized(error.msg));
  33. }
  34. });
  35. }
  36. }
  37. @freezed
  38. class HomeAuthEvent with _$HomeAuthEvent {
  39. const factory HomeAuthEvent.started() = _Started;
  40. const factory HomeAuthEvent.stop() = _Stop;
  41. const factory HomeAuthEvent.unauthorized(String msg) = _Unauthorized;
  42. }
  43. @freezed
  44. class HomeAuthState with _$HomeAuthState {
  45. const factory HomeAuthState.loading() = Loading;
  46. const factory HomeAuthState.unauthorized(String msg) = Unauthorized;
  47. }