editor_page.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import 'dart:io';
  2. import 'package:app_flowy/startup/startup.dart';
  3. import 'package:app_flowy/workspace/application/doc/doc_bloc.dart';
  4. import 'package:app_flowy/workspace/domain/i_doc.dart';
  5. import 'package:flowy_editor/flowy_editor.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter_bloc/flutter_bloc.dart';
  8. class EditorPage extends StatelessWidget {
  9. final FocusNode _focusNode = FocusNode();
  10. late EditorController controller;
  11. final Doc doc;
  12. EditorPage({Key? key, required this.doc}) : super(key: key) {
  13. controller = EditorController(
  14. document: doc.data,
  15. selection: const TextSelection.collapsed(offset: 0),
  16. persistence: getIt<EditorPersistence>(param1: doc.info.id),
  17. );
  18. }
  19. @override
  20. Widget build(BuildContext context) {
  21. return BlocProvider(
  22. create: (context) => getIt<DocBloc>(param1: doc.info.id),
  23. child: BlocBuilder<DocBloc, DocState>(
  24. builder: (ctx, state) {
  25. return Column(
  26. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  27. children: [
  28. _renderEditor(controller),
  29. _renderToolbar(controller),
  30. ],
  31. );
  32. },
  33. ),
  34. );
  35. }
  36. Widget _renderEditor(EditorController controller) {
  37. final editor = FlowyEditor(
  38. controller: controller,
  39. focusNode: _focusNode,
  40. scrollable: true,
  41. autoFocus: false,
  42. expands: false,
  43. padding: const EdgeInsets.symmetric(horizontal: 8.0),
  44. readOnly: false,
  45. scrollBottomInset: 0,
  46. scrollController: ScrollController(),
  47. );
  48. return Expanded(
  49. child: Padding(padding: const EdgeInsets.all(10), child: editor),
  50. );
  51. }
  52. Widget _renderToolbar(EditorController controller) {
  53. return FlowyToolbar.basic(
  54. controller: controller,
  55. onImageSelectCallback: _onImageSelection,
  56. );
  57. }
  58. Future<String> _onImageSelection(File file) {
  59. throw UnimplementedError();
  60. }
  61. }