doc_bloc.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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_bloc.freezed.dart';
  6. class DocBloc extends Bloc<DocEvent, DocState> {
  7. final IDoc iDocImpl;
  8. DocBloc({
  9. required this.iDocImpl,
  10. }) : super(const DocState.loading());
  11. @override
  12. Stream<DocState> mapEventToState(DocEvent event) async* {
  13. yield* event.map(
  14. loadDoc: (_) async* {
  15. yield* _readDoc();
  16. },
  17. );
  18. }
  19. Stream<DocState> _readDoc() async* {
  20. final docOrFail = await iDocImpl.readDoc();
  21. yield docOrFail.fold(
  22. (doc) {
  23. final flowyDoc = FlowyDoc(doc: doc, iDocImpl: iDocImpl);
  24. return DocState.loadDoc(flowyDoc);
  25. },
  26. (error) {
  27. return DocState.loadFail(error);
  28. },
  29. );
  30. }
  31. // Document _decodeListToDocument(Uint8List data) {
  32. // final json = jsonDecode(utf8.decode(data));
  33. // final document = Document.fromJson(json);
  34. // return document;
  35. // }
  36. // Document _decodeJsonToDocument(String data) {
  37. // final json = jsonDecode(data);
  38. // final document = Document.fromJson(json);
  39. // return document;
  40. // }
  41. }
  42. @freezed
  43. class DocEvent with _$DocEvent {
  44. const factory DocEvent.loadDoc() = LoadDoc;
  45. }
  46. @freezed
  47. class DocState with _$DocState {
  48. const factory DocState.loading() = Loading;
  49. const factory DocState.loadDoc(FlowyDoc doc) = LoadedDoc;
  50. const factory DocState.loadFail(WorkspaceError error) = LoadFail;
  51. }