| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 
							- import 'package:app_flowy/plugins/document/presentation/plugins/board/board_menu_item.dart';
 
- import 'package:app_flowy/plugins/document/presentation/plugins/board/board_node_widget.dart';
 
- import 'package:app_flowy/plugins/document/presentation/plugins/grid/grid_menu_item.dart';
 
- import 'package:app_flowy/plugins/document/presentation/plugins/grid/grid_node_widget.dart';
 
- import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
 
- import 'package:appflowy_editor/appflowy_editor.dart';
 
- import 'package:appflowy_editor_plugins/appflowy_editor_plugins.dart';
 
- import 'package:flowy_infra_ui/widget/error_page.dart';
 
- import 'package:flutter/material.dart';
 
- import 'package:flutter_bloc/flutter_bloc.dart';
 
- import 'package:intl/intl.dart';
 
- import '../../startup/startup.dart';
 
- import 'application/doc_bloc.dart';
 
- import 'editor_styles.dart';
 
- import 'presentation/banner.dart';
 
- class DocumentPage extends StatefulWidget {
 
-   final VoidCallback onDeleted;
 
-   final ViewPB view;
 
-   DocumentPage({
 
-     required this.view,
 
-     required this.onDeleted,
 
-     Key? key,
 
-   }) : super(key: ValueKey(view.id));
 
-   @override
 
-   State<DocumentPage> createState() => _DocumentPageState();
 
- }
 
- class _DocumentPageState extends State<DocumentPage> {
 
-   late DocumentBloc documentBloc;
 
-   final FocusNode _focusNode = FocusNode();
 
-   @override
 
-   void initState() {
 
-     // The appflowy editor use Intl as localization, set the default language as fallback.
 
-     Intl.defaultLocale = 'en_US';
 
-     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: (_) => SizedBox.expand(
 
-             child: Container(color: Colors.transparent),
 
-           ),
 
-           finish: (result) => result.successOrFail.fold(
 
-             (_) {
 
-               if (state.forceClose) {
 
-                 widget.onDeleted();
 
-                 return const SizedBox();
 
-               } 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) {
 
-     return Column(
 
-       children: [
 
-         if (state.isDeleted) _renderBanner(context),
 
-         // AppFlowy Editor
 
-         _renderAppFlowyEditor(
 
-           context.read<DocumentBloc>().editorState,
 
-         ),
 
-       ],
 
-     );
 
-   }
 
-   Widget _renderBanner(BuildContext context) {
 
-     return DocumentBanner(
 
-       onRestore: () =>
 
-           context.read<DocumentBloc>().add(const DocumentEvent.restorePage()),
 
-       onDelete: () => context
 
-           .read<DocumentBloc>()
 
-           .add(const DocumentEvent.deletePermanently()),
 
-     );
 
-   }
 
-   Widget _renderAppFlowyEditor(EditorState editorState) {
 
-     final theme = Theme.of(context);
 
-     final editor = AppFlowyEditor(
 
-       editorState: editorState,
 
-       autoFocus: editorState.document.isEmpty,
 
-       customBuilders: {
 
-         // Divider
 
-         kDividerType: DividerWidgetBuilder(),
 
-         // Math Equation
 
-         kMathEquationType: MathEquationNodeWidgetBuidler(),
 
-         // Code Block
 
-         kCodeBlockType: CodeBlockNodeWidgetBuilder(),
 
-         // Board
 
-         kBoardType: BoardNodeWidgetBuilder(),
 
-         // Grid
 
-         kGridType: GridNodeWidgetBuilder(),
 
-         // Card
 
-         kCalloutType: CalloutNodeWidgetBuilder(),
 
-       },
 
-       shortcutEvents: [
 
-         // Divider
 
-         insertDividerEvent,
 
-         // Code Block
 
-         enterInCodeBlock,
 
-         ignoreKeysInCodeBlock,
 
-         pasteInCodeBlock,
 
-       ],
 
-       selectionMenuItems: [
 
-         // Divider
 
-         dividerMenuItem,
 
-         // Math Equation
 
-         mathEquationMenuItem,
 
-         // Code Block
 
-         codeBlockMenuItem,
 
-         // Emoji
 
-         emojiMenuItem,
 
-         // Board
 
-         boardMenuItem,
 
-         // Grid
 
-         gridMenuItem,
 
-         // Callout
 
-         calloutMenuItem,
 
-       ],
 
-       themeData: theme.copyWith(extensions: [
 
-         ...theme.extensions.values,
 
-         customEditorTheme(context),
 
-         ...customPluginTheme(context),
 
-       ]),
 
-     );
 
-     return Expanded(
 
-       child: Center(
 
-         child: Container(
 
-           constraints: const BoxConstraints(
 
-             maxWidth: double.infinity,
 
-           ),
 
-           child: editor,
 
-         ),
 
-       ),
 
-     );
 
-   }
 
- }
 
 
  |