doc_watch_bloc.dart 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  2. import 'package:flutter_bloc/flutter_bloc.dart';
  3. import 'package:app_flowy/workspace/domain/i_doc.dart';
  4. import 'package:freezed_annotation/freezed_annotation.dart';
  5. part 'doc_watch_bloc.freezed.dart';
  6. class DocWatchBloc extends Bloc<DocWatchEvent, DocWatchState> {
  7. final IDoc iDocImpl;
  8. DocWatchBloc({
  9. required this.iDocImpl,
  10. }) : super(const DocWatchState.loading());
  11. @override
  12. Stream<DocWatchState> mapEventToState(DocWatchEvent event) async* {
  13. yield* event.map(
  14. started: (_) async* {
  15. yield* _readDoc();
  16. },
  17. );
  18. }
  19. Stream<DocWatchState> _readDoc() async* {
  20. final docOrFail = await iDocImpl.readDoc();
  21. yield docOrFail.fold(
  22. (doc) => DocWatchState.loadDoc(doc),
  23. (error) {
  24. return DocWatchState.loadFail(error);
  25. },
  26. );
  27. }
  28. }
  29. @freezed
  30. class DocWatchEvent with _$DocWatchEvent {
  31. const factory DocWatchEvent.started() = Started;
  32. }
  33. @freezed
  34. class DocWatchState with _$DocWatchState {
  35. const factory DocWatchState.loading() = Loading;
  36. const factory DocWatchState.loadDoc(FlowyDoc doc) = LoadDoc;
  37. const factory DocWatchState.loadFail(WorkspaceError error) = LoadFail;
  38. }