|
@@ -18,11 +18,14 @@ import 'list.dart';
|
18
|
18
|
import 'paragraph.dart';
|
19
|
19
|
import 'quote.dart';
|
20
|
20
|
import 'render_context.dart';
|
|
21
|
+import 'scope.dart';
|
21
|
22
|
import 'selection.dart';
|
|
23
|
+import 'theme.dart';
|
22
|
24
|
|
23
|
25
|
/// Core widget responsible for editing Zefyr documents.
|
24
|
26
|
///
|
25
|
|
-/// Depends on presence of [ZefyrTheme] somewhere up the widget tree.
|
|
27
|
+/// Depends on presence of [ZefyrTheme] and [ZefyrScope] somewhere up the
|
|
28
|
+/// widget tree.
|
26
|
29
|
///
|
27
|
30
|
/// Consider using [ZefyrEditor] which wraps this widget and adds a toolbar to
|
28
|
31
|
/// edit style attributes.
|
|
@@ -95,8 +98,6 @@ class _ZefyrEditableTextState extends State<ZefyrEditableText>
|
95
|
98
|
|
96
|
99
|
/// Current text selection.
|
97
|
100
|
TextSelection get selection => widget.controller.selection;
|
98
|
|
- ZefyrRenderContext get renderContext => _renderContext;
|
99
|
|
- ValueNotifier<bool> get showCursor => _cursorTimer.value;
|
100
|
101
|
|
101
|
102
|
/// Express interest in interacting with the keyboard.
|
102
|
103
|
///
|
|
@@ -165,6 +166,22 @@ class _ZefyrEditableTextState extends State<ZefyrEditableText>
|
165
|
166
|
}
|
166
|
167
|
}
|
167
|
168
|
|
|
169
|
+ @override
|
|
170
|
+ void didChangeDependencies() {
|
|
171
|
+ super.didChangeDependencies();
|
|
172
|
+ final scope = ZefyrScope.of(context);
|
|
173
|
+ if (_renderContext != scope.renderContext) {
|
|
174
|
+ _renderContext?.removeListener(_handleRenderContextChange);
|
|
175
|
+ _renderContext = scope.renderContext;
|
|
176
|
+ _renderContext.addListener(_handleRenderContextChange);
|
|
177
|
+ }
|
|
178
|
+ if (_cursorTimer != scope.cursorTimer) {
|
|
179
|
+ _cursorTimer?.stop();
|
|
180
|
+ _cursorTimer = scope.cursorTimer;
|
|
181
|
+ _cursorTimer.startOrStop(focusNode, selection);
|
|
182
|
+ }
|
|
183
|
+ }
|
|
184
|
+
|
168
|
185
|
@override
|
169
|
186
|
void dispose() {
|
170
|
187
|
_cancelSubscriptions();
|
|
@@ -183,8 +200,8 @@ class _ZefyrEditableTextState extends State<ZefyrEditableText>
|
183
|
200
|
//
|
184
|
201
|
|
185
|
202
|
final ScrollController _scrollController = ScrollController();
|
186
|
|
- final ZefyrRenderContext _renderContext = ZefyrRenderContext();
|
187
|
|
- final CursorTimer _cursorTimer = CursorTimer();
|
|
203
|
+ ZefyrRenderContext _renderContext;
|
|
204
|
+ CursorTimer _cursorTimer;
|
188
|
205
|
InputConnectionController _input;
|
189
|
206
|
bool _didAutoFocus = false;
|
190
|
207
|
|
|
@@ -223,7 +240,6 @@ class _ZefyrEditableTextState extends State<ZefyrEditableText>
|
223
|
240
|
|
224
|
241
|
void _updateSubscriptions([ZefyrEditableText oldWidget]) {
|
225
|
242
|
if (oldWidget == null) {
|
226
|
|
- _renderContext.addListener(_handleRenderContextChange);
|
227
|
243
|
widget.controller.addListener(_handleLocalValueChange);
|
228
|
244
|
focusNode.addListener(_handleFocusChange);
|
229
|
245
|
return;
|
|
@@ -243,7 +259,6 @@ class _ZefyrEditableTextState extends State<ZefyrEditableText>
|
243
|
259
|
|
244
|
260
|
void _cancelSubscriptions() {
|
245
|
261
|
_renderContext.removeListener(_handleRenderContextChange);
|
246
|
|
- _renderContext.dispose();
|
247
|
262
|
widget.controller.removeListener(_handleLocalValueChange);
|
248
|
263
|
focusNode.removeListener(_handleFocusChange);
|
249
|
264
|
_input.closeConnection();
|