| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | import 'dart:async';import 'dart:io';import 'package:app_flowy/startup/tasks/rust_sdk.dart';import 'package:app_flowy/workspace/application/doc/share_service.dart';import 'package:app_flowy/workspace/application/markdown/delta_markdown.dart';import 'package:flowy_sdk/protobuf/flowy-text-block/entities.pb.dart';import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart';import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';import 'package:freezed_annotation/freezed_annotation.dart';import 'package:flutter_bloc/flutter_bloc.dart';import 'package:dartz/dartz.dart';part 'share_bloc.freezed.dart';class DocShareBloc extends Bloc<DocShareEvent, DocShareState> {  ShareService service;  ViewPB view;  DocShareBloc({required this.view, required this.service}) : super(const DocShareState.initial()) {    on<DocShareEvent>((event, emit) async {      await event.map(        shareMarkdown: (ShareMarkdown value) async {          await service.exportMarkdown(view.id).then((result) {            result.fold(              (value) => emit(DocShareState.finish(left(_convertDeltaToMarkdown(value)))),              (error) => emit(DocShareState.finish(right(error))),            );          });          emit(const DocShareState.loading());        },        shareLink: (ShareLink value) {},        shareText: (ShareText value) {},      );    });  }  ExportDataPB _convertDeltaToMarkdown(ExportDataPB value) {    final result = deltaToMarkdown(value.data);    value.data = result;    writeFile(result);    return value;  }  Future<Directory> get _exportDir async {    Directory documentsDir = await appFlowyDocumentDirectory();    return documentsDir;  }  Future<String> get _localPath async {    final dir = await _exportDir;    return dir.path;  }  Future<File> get _localFile async {    final path = await _localPath;    return File('$path/${view.name}.md');  }  Future<File> writeFile(String md) async {    final file = await _localFile;    return file.writeAsString(md);  }}@freezedclass DocShareEvent with _$DocShareEvent {  const factory DocShareEvent.shareMarkdown() = ShareMarkdown;  const factory DocShareEvent.shareText() = ShareText;  const factory DocShareEvent.shareLink() = ShareLink;}@freezedclass DocShareState with _$DocShareState {  const factory DocShareState.initial() = _Initial;  const factory DocShareState.loading() = _Loading;  const factory DocShareState.finish(Either<ExportDataPB, FlowyError> successOrFail) = _Finish;}
 |