menu_user_bloc.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import 'package:app_flowy/workspace/domain/i_user.dart';
  2. import 'package:flowy_log/flowy_log.dart';
  3. import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
  4. import 'package:flowy_sdk/protobuf/flowy-workspace-infra/workspace_create.pb.dart';
  5. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:freezed_annotation/freezed_annotation.dart';
  8. import 'package:dartz/dartz.dart';
  9. part 'menu_user_bloc.freezed.dart';
  10. class MenuUserBloc extends Bloc<MenuUserEvent, MenuUserState> {
  11. final IUser userManager;
  12. final IUserListener listener;
  13. MenuUserBloc(this.userManager, this.listener) : super(MenuUserState.initial(userManager.user));
  14. @override
  15. Stream<MenuUserState> mapEventToState(MenuUserEvent event) async* {
  16. yield* event.map(
  17. initial: (_) async* {
  18. listener.setProfileCallback(_profileUpdated);
  19. listener.setWorkspacesCallback(_workspacesUpdated);
  20. listener.start();
  21. await _initUser();
  22. },
  23. fetchWorkspaces: (_FetchWorkspaces value) async* {},
  24. );
  25. }
  26. @override
  27. Future<void> close() async {
  28. await listener.stop();
  29. super.close();
  30. }
  31. Future<void> _initUser() async {
  32. final result = await userManager.initUser();
  33. result.fold((l) => null, (error) => Log.error(error));
  34. }
  35. void _profileUpdated(Either<UserProfile, UserError> userOrFailed) {}
  36. void _workspacesUpdated(Either<List<Workspace>, WorkspaceError> workspacesOrFailed) {
  37. // fetch workspaces
  38. // iUserImpl.fetchWorkspaces().then((result) {
  39. // result.fold(
  40. // (workspaces) async* {
  41. // yield state.copyWith(workspaces: some(workspaces));
  42. // },
  43. // (error) async* {
  44. // yield state.copyWith(successOrFailure: right(error.msg));
  45. // },
  46. // );
  47. // });
  48. }
  49. }
  50. @freezed
  51. class MenuUserEvent with _$MenuUserEvent {
  52. const factory MenuUserEvent.initial() = _Initial;
  53. const factory MenuUserEvent.fetchWorkspaces() = _FetchWorkspaces;
  54. }
  55. @freezed
  56. class MenuUserState with _$MenuUserState {
  57. const factory MenuUserState({
  58. required UserProfile user,
  59. required Option<List<Workspace>> workspaces,
  60. required Either<Unit, String> successOrFailure,
  61. }) = _MenuUserState;
  62. factory MenuUserState.initial(UserProfile user) => MenuUserState(
  63. user: user,
  64. workspaces: none(),
  65. successOrFailure: left(unit),
  66. );
  67. }