| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 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:dartz/dartz.dart';part 'doc_bloc.freezed.dart';class DocBloc extends Bloc<DocEvent, DocState> {  final IDoc docManager;  DocBloc({required this.docManager}) : super(DocState.initial());  @override  Stream<DocState> mapEventToState(DocEvent event) async* {    yield* event.map(      initial: _initial,    );  }  @override  Future<void> close() async {    docManager.closeDoc();    await state.doc.fold(() => null, (doc) async {      await doc.close();    });    return super.close();  }  Stream<DocState> _initial(Initial value) async* {    final result = await docManager.readDoc();    yield result.fold(      (doc) {        final flowyDoc = FlowyDoc(doc: doc, iDocImpl: docManager);        return state.copyWith(          doc: some(flowyDoc),          loadState: DocLoadState.finish(left(flowyDoc)),        );      },      (err) {        return state.copyWith(          doc: none(),          loadState: DocLoadState.finish(right(err)),        );      },    );  }  // 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.initial() = Initial;}@freezedclass DocState with _$DocState {  const factory DocState({required Option<FlowyDoc> doc, required DocLoadState loadState}) = _DocState;  factory DocState.initial() => DocState(doc: none(), loadState: const _Loading());}@freezedclass DocLoadState with _$DocLoadState {  const factory DocLoadState.loading() = _Loading;  const factory DocLoadState.finish(Either<FlowyDoc, WorkspaceError> successOrFail) = _Finish;}
 |