doc_bloc.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import 'dart:typed_data';
  2. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  3. import 'package:flutter_bloc/flutter_bloc.dart';
  4. import 'package:app_flowy/workspace/domain/i_doc.dart';
  5. import 'package:freezed_annotation/freezed_annotation.dart';
  6. import 'package:flowy_editor/flowy_editor.dart';
  7. import 'dart:convert';
  8. part 'doc_bloc.freezed.dart';
  9. class DocBloc extends Bloc<DocEvent, DocState> {
  10. final IDoc iDocImpl;
  11. DocBloc({
  12. required this.iDocImpl,
  13. }) : super(const DocState.loading());
  14. @override
  15. Stream<DocState> mapEventToState(DocEvent event) async* {
  16. yield* event.map(
  17. loadDoc: (_) async* {
  18. yield* _readDoc();
  19. },
  20. );
  21. }
  22. Stream<DocState> _readDoc() async* {
  23. final docOrFail = await iDocImpl.readDoc();
  24. yield docOrFail.fold(
  25. (doc) {
  26. final flowyDoc = FlowyDoc(doc: doc, iDocImpl: iDocImpl);
  27. return DocState.loadDoc(flowyDoc);
  28. },
  29. (error) {
  30. return DocState.loadFail(error);
  31. },
  32. );
  33. }
  34. Document _decodeListToDocument(Uint8List data) {
  35. final json = jsonDecode(utf8.decode(data));
  36. final document = Document.fromJson(json);
  37. return document;
  38. }
  39. Document _decodeJsonToDocument(String data) {
  40. final json = jsonDecode(data);
  41. final document = Document.fromJson(json);
  42. return document;
  43. }
  44. }
  45. @freezed
  46. class DocEvent with _$DocEvent {
  47. const factory DocEvent.loadDoc() = LoadDoc;
  48. }
  49. @freezed
  50. class DocState with _$DocState {
  51. const factory DocState.loading() = Loading;
  52. const factory DocState.loadDoc(FlowyDoc doc) = LoadedDoc;
  53. const factory DocState.loadFail(WorkspaceError error) = LoadFail;
  54. }