diff --git a/lib/ui/app/invoice/invoice_email_view.dart b/lib/ui/app/invoice/invoice_email_view.dart index d9c742f84..06072d943 100644 --- a/lib/ui/app/invoice/invoice_email_view.dart +++ b/lib/ui/app/invoice/invoice_email_view.dart @@ -307,8 +307,11 @@ class _InvoiceEmailViewState extends State child: Material( color: Colors.white, child: ExampleEditor( - key: ValueKey('__body_${_rawBodyPreview}__'), - initialValue: _rawBodyPreview, + value: _rawBodyPreview, + onChanged: (value) { + _bodyController.text = value; + _onChanged(); + }, ), ), ), diff --git a/lib/utils/super_editor/super_editor.dart b/lib/utils/super_editor/super_editor.dart index 8e0ec1424..c88a6563e 100644 --- a/lib/utils/super_editor/super_editor.dart +++ b/lib/utils/super_editor/super_editor.dart @@ -10,10 +10,12 @@ import 'package:super_editor/super_editor.dart'; class ExampleEditor extends StatefulWidget { const ExampleEditor({ Key key, - @required this.initialValue, + @required this.value, + @required this.onChanged, }) : super(key: key); - final String initialValue; + final String value; + final Function(String) onChanged; @override _ExampleEditorState createState() => _ExampleEditorState(); @@ -39,12 +41,10 @@ class _ExampleEditorState extends State { @override void initState() { - print('## INIT: ${widget.initialValue}'); - final value = deserializeMarkdownToDocument(widget.initialValue); - super.initState(); - _doc = value..addListener(_hideOrShowToolbar); + _doc = deserializeMarkdownToDocument(widget.value) + ..addListener(_hideOrShowToolbar); _docEditor = DocumentEditor(document: _doc as MutableDocument); _composer = DocumentComposer()..addListener(_hideOrShowToolbar); _docOps = CommonEditorOperations( @@ -57,6 +57,16 @@ class _ExampleEditorState extends State { _scrollController = ScrollController()..addListener(_hideOrShowToolbar); } + @override + void didUpdateWidget(ExampleEditor oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.value != oldWidget.value) { + _doc = deserializeMarkdownToDocument(widget.value) + ..addListener(_hideOrShowToolbar); + } + } + @override void dispose() { if (_textFormatBarOverlayEntry != null) { @@ -70,6 +80,9 @@ class _ExampleEditorState extends State { } void _hideOrShowToolbar() { + final value = serializeDocumentToMarkdown(_doc); + widget.onChanged(value); + if (_gestureMode != DocumentGestureMode.mouse) { // We only add our own toolbar when using mouse. On mobile, a bar // is rendered for us.