| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | import 'dart:typed_data';import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';import 'package:flutter_bloc/flutter_bloc.dart';import 'package:app_flowy/workspace/domain/i_doc.dart';import 'package:freezed_annotation/freezed_annotation.dart';import 'package:flowy_editor/flowy_editor.dart';import 'dart:convert';part 'doc_bloc.freezed.dart';class DocBloc extends Bloc<DocEvent, DocState> {  final IDoc iDocImpl;  DocBloc({    required this.iDocImpl,  }) : super(const DocState.loading());  @override  Stream<DocState> mapEventToState(DocEvent event) async* {    yield* event.map(      loadDoc: (_) async* {        yield* _readDoc();      },    );  }  Stream<DocState> _readDoc() async* {    final docOrFail = await iDocImpl.readDoc();    yield docOrFail.fold(      (doc) {        final flowyDoc = FlowyDoc(            doc: doc,            data: _decodeJsonToDocument(              doc.data,            ),            iDocImpl: iDocImpl);        return DocState.loadDoc(flowyDoc);      },      (error) {        return DocState.loadFail(error);      },    );  }  Document _decodeListToDocument(Uint8List data) {    final json = jsonDecode(utf8.decode(data));    final document = Document.fromJson(json);    return document;  }  Document _decodeJsonToDocument(String data) {    final json = jsonDecode(data);    final document = Document.fromJson(json);    return document;  }}@freezedclass DocEvent with _$DocEvent {  const factory DocEvent.loadDoc() = LoadDoc;}@freezedclass DocState with _$DocState {  const factory DocState.loading() = Loading;  const factory DocState.loadDoc(FlowyDoc doc) = LoadedDoc;  const factory DocState.loadFail(WorkspaceError error) = LoadFail;}
 |