import 'dart:io'; import 'package:app_flowy/startup/startup.dart'; import 'package:app_flowy/workspace/application/doc/doc_edit_bloc.dart'; import 'package:app_flowy/workspace/domain/i_doc.dart'; import 'package:flowy_editor/flowy_editor.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; // ignore: must_be_immutable class DocPage extends StatefulWidget { late EditorController controller; late DocEditBloc editBloc; final FlowyDoc doc; DocPage({Key? key, required this.doc}) : super(key: key) { editBloc = getIt(param1: doc.id); controller = EditorController( document: doc.document, selection: const TextSelection.collapsed(offset: 0), ); } @override State createState() => _DocPageState(); } class _DocPageState extends State { final FocusNode _focusNode = FocusNode(); @override Widget build(BuildContext context) { return BlocProvider.value( value: widget.editBloc, child: BlocBuilder( builder: (ctx, state) { return Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ _renderEditor(widget.controller), _renderToolbar(widget.controller), ], ); }, ), ); } @override Future dispose() async { widget.editBloc.add(const DocEditEvent.close()); widget.editBloc.close(); super.dispose(); await widget.doc.close(); } Widget _renderEditor(EditorController controller) { final editor = FlowyEditor( controller: controller, focusNode: _focusNode, scrollable: true, autoFocus: false, expands: false, padding: const EdgeInsets.symmetric(horizontal: 8.0), readOnly: false, scrollBottomInset: 0, scrollController: ScrollController(), ); return Expanded( child: Padding(padding: const EdgeInsets.all(10), child: editor), ); } Widget _renderToolbar(EditorController controller) { return FlowyToolbar.basic( controller: controller, onImageSelectCallback: _onImageSelection, ); } Future _onImageSelection(File file) { throw UnimplementedError(); } }