doc_watch_bloc.dart 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import 'package:flutter_bloc/flutter_bloc.dart';
  2. import 'package:app_flowy/workspace/domain/i_doc.dart';
  3. import 'package:freezed_annotation/freezed_annotation.dart';
  4. import 'package:flowy_sdk/protobuf/flowy-editor/errors.pb.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) => DocWatchState.loadFail(error),
  24. );
  25. }
  26. }
  27. @freezed
  28. class DocWatchEvent with _$DocWatchEvent {
  29. const factory DocWatchEvent.started() = Started;
  30. }
  31. @freezed
  32. class DocWatchState with _$DocWatchState {
  33. const factory DocWatchState.loading() = Loading;
  34. const factory DocWatchState.loadDoc(Doc doc) = LoadDoc;
  35. const factory DocWatchState.loadFail(EditorError error) = LoadFail;
  36. }