| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | import 'package:app_flowy/startup/startup.dart';import 'package:app_flowy/workspace/application/appearance.dart';import 'package:app_flowy/plugins/doc/presentation/banner.dart';import 'package:app_flowy/plugins/doc/presentation/toolbar/tool_bar.dart';import 'package:flowy_infra_ui/style_widget/scrolling/styled_scroll_bar.dart';import 'package:flowy_infra_ui/widget/spacing.dart';import 'package:flutter_quill/flutter_quill.dart' as quill;import 'package:flowy_infra_ui/widget/error_page.dart';import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart';import 'package:flutter/material.dart';import 'package:flutter_bloc/flutter_bloc.dart';import 'package:provider/provider.dart';import 'application/doc_bloc.dart';import 'styles.dart';class DocumentPage extends StatefulWidget {  final ViewPB view;  DocumentPage({Key? key, required this.view}) : super(key: ValueKey(view.id));  @override  State<DocumentPage> createState() => _DocumentPageState();}class _DocumentPageState extends State<DocumentPage> {  late DocumentBloc documentBloc;  final scrollController = ScrollController();  final FocusNode _focusNode = FocusNode();  @override  void initState() {    documentBloc = getIt<DocumentBloc>(param1: super.widget.view)      ..add(const DocumentEvent.initial());    super.initState();  }  @override  Widget build(BuildContext context) {    return MultiBlocProvider(      providers: [        BlocProvider<DocumentBloc>.value(value: documentBloc),      ],      child:          BlocBuilder<DocumentBloc, DocumentState>(builder: (context, state) {        return state.loadingState.map(          // loading: (_) => const FlowyProgressIndicator(),          loading: (_) =>              SizedBox.expand(child: Container(color: Colors.transparent)),          finish: (result) => result.successOrFail.fold(            (_) {              if (state.forceClose) {                return _renderAppPage();              } else {                return _renderDocument(context, state);              }            },            (err) => FlowyErrorPage(err.toString()),          ),        );      }),    );  }  @override  Future<void> dispose() async {    documentBloc.close();    _focusNode.dispose();    super.dispose();  }  Widget _renderDocument(BuildContext context, DocumentState state) {    quill.QuillController controller = quill.QuillController(      document: context.read<DocumentBloc>().document,      selection: const TextSelection.collapsed(offset: 0),    );    return Column(      children: [        if (state.isDeleted) _renderBanner(context),        Expanded(          child: Column(            mainAxisAlignment: MainAxisAlignment.spaceBetween,            children: [              _renderEditor(controller),              const VSpace(10),              _renderToolbar(controller),              const VSpace(10),            ],          ),        ),      ],    );  }  Widget _renderBanner(BuildContext context) {    return DocumentBanner(      onRestore: () =>          context.read<DocumentBloc>().add(const DocumentEvent.restorePage()),      onDelete: () => context          .read<DocumentBloc>()          .add(const DocumentEvent.deletePermanently()),    );  }  Widget _renderEditor(quill.QuillController controller) {    final editor = quill.QuillEditor(      controller: controller,      focusNode: _focusNode,      scrollable: true,      paintCursorAboveText: true,      autoFocus: controller.document.isEmpty(),      expands: false,      padding: const EdgeInsets.symmetric(horizontal: 8.0),      readOnly: false,      scrollBottomInset: 0,      scrollController: scrollController,      customStyles: customStyles(context),    );    return Expanded(      child: ScrollbarListStack(        axis: Axis.vertical,        controller: scrollController,        barSize: 6.0,        child: SizedBox.expand(child: editor),      ),    );  }  Widget _renderToolbar(quill.QuillController controller) {    return ChangeNotifierProvider.value(      value: Provider.of<AppearanceSettingModel>(context, listen: true),      child: EditorToolbar.basic(        controller: controller,      ),    );  }  Widget _renderAppPage() {    return Container(      color: Colors.black,    );  }}
 |