@@ -25,8 +25,7 @@ import 'package:flutter/material.dart'
2525 ScrollToDocumentBoundaryIntent,
2626 Size,
2727 kMinInteractiveDimension;
28- import 'package:flutter/rendering.dart'
29- show CaretChangedHandler, RevealedOffset, ViewportOffset;
28+ import 'package:flutter/rendering.dart' show RevealedOffset, ViewportOffset;
3029import 'package:flutter/scheduler.dart' ;
3130import 'package:flutter/services.dart' ;
3231import 'package:flutter/widgets.dart'
@@ -133,7 +132,6 @@ import 'package:mongol/src/base/mongol_text_align.dart';
133132import 'package:mongol/src/editing/mongol_render_editable.dart' ;
134133import 'package:mongol/src/editing/text_selection/mongol_text_selection.dart' ;
135134
136- import 'mongol_text_editing_action.dart' ;
137135import 'mongol_text_editing_intents.dart' ;
138136
139137export 'package:flutter/services.dart'
@@ -381,7 +379,7 @@ class MongolEditableText extends StatefulWidget {
381379 'Use `contextMenuBuilder` instead. '
382380 'This feature was deprecated after v3.3.0-0.5.pre.' ,
383381 )
384- ToolbarOptions ? toolbarOptions,
382+ ToolbarOptions ? toolbarOptions,
385383 this .autofillHints,
386384 this .autofillClient,
387385 this .clipBehavior = Clip .hardEdge,
@@ -1373,8 +1371,9 @@ class MongolEditableTextState extends State<MongolEditableText>
13731371 AutomaticKeepAliveClientMixin <MongolEditableText >,
13741372 WidgetsBindingObserver ,
13751373 TickerProviderStateMixin <MongolEditableText >,
1376- TextSelectionDelegate
1377- implements TextInputClient , AutofillClient , MongolTextEditingActionTarget {
1374+ TextSelectionDelegate ,
1375+ TextInputClient
1376+ implements AutofillClient {
13781377 Timer ? _cursorTimer;
13791378 AnimationController get _cursorBlinkOpacityController {
13801379 return _backingCursorBlinkOpacityController ?? = AnimationController (
@@ -2543,12 +2542,6 @@ class MongolEditableTextState extends State<MongolEditableText>
25432542 }
25442543 }
25452544
2546- Rect ? _currentCaretRect;
2547-
2548- void _handleCaretChanged (Rect caretRect) {
2549- _currentCaretRect = caretRect;
2550- }
2551-
25522545 // Animation configuration for scrolling the caret back on screen.
25532546 static const Duration _caretAnimationDuration = Duration (milliseconds: 100 );
25542547 static const Curve _caretAnimationCurve = Curves .fastOutSlowIn;
@@ -2562,7 +2555,13 @@ class MongolEditableTextState extends State<MongolEditableText>
25622555 _showCaretOnScreenScheduled = true ;
25632556 SchedulerBinding .instance.addPostFrameCallback ((Duration _) {
25642557 _showCaretOnScreenScheduled = false ;
2565- if (_currentCaretRect == null || ! _scrollController.hasClients) {
2558+ // Since we are in a post frame callback, check currentContext in case
2559+ // RenderEditable has been disposed (in which case it will be null).
2560+ final renderEditable = _editableKey.currentContext? .findRenderObject ()
2561+ as MongolRenderEditable ? ;
2562+ if (renderEditable == null ||
2563+ ! (renderEditable.selection? .isValid ?? false ) ||
2564+ ! _scrollController.hasClients) {
25662565 return ;
25672566 }
25682567
@@ -2592,7 +2591,9 @@ class MongolEditableTextState extends State<MongolEditableText>
25922591
25932592 final caretPadding = widget.scrollPadding.copyWith (right: rightSpacing);
25942593
2595- final targetOffset = _getOffsetToRevealCaret (_currentCaretRect! );
2594+ final caretRect =
2595+ renderEditable.getLocalRectForCaret (renderEditable.selection! .extent);
2596+ final targetOffset = _getOffsetToRevealCaret (caretRect);
25962597
25972598 final Rect rectToReveal;
25982599 final TextSelection selection = textEditingValue.selection;
@@ -2891,8 +2892,7 @@ class MongolEditableTextState extends State<MongolEditableText>
28912892 ///
28922893 /// This property is typically used to notify the renderer of input gestures
28932894 /// when [MongolRenderEditable.ignorePointer] is true.
2894- @override
2895- MongolRenderEditable get renderEditable =>
2895+ late final MongolRenderEditable renderEditable =
28962896 _editableKey.currentContext! .findRenderObject ()! as MongolRenderEditable ;
28972897
28982898 @override
@@ -3590,7 +3590,6 @@ class MongolEditableTextState extends State<MongolEditableText>
35903590 autocorrect: widget.autocorrect,
35913591 enableSuggestions: widget.enableSuggestions,
35923592 offset: offset,
3593- onCaretChanged: _handleCaretChanged,
35943593 rendererIgnoresPointer: widget.rendererIgnoresPointer,
35953594 cursorWidth: widget.cursorWidth,
35963595 cursorHeight: widget.cursorHeight,
@@ -3665,7 +3664,6 @@ class _MongolEditable extends LeafRenderObjectWidget {
36653664 required this .autocorrect,
36663665 required this .enableSuggestions,
36673666 required this .offset,
3668- this .onCaretChanged,
36693667 this .rendererIgnoresPointer = false ,
36703668 this .cursorWidth,
36713669 required this .cursorHeight,
@@ -3697,7 +3695,6 @@ class _MongolEditable extends LeafRenderObjectWidget {
36973695 final bool autocorrect;
36983696 final bool enableSuggestions;
36993697 final ViewportOffset offset;
3700- final CaretChangedHandler ? onCaretChanged;
37013698 final bool rendererIgnoresPointer;
37023699 final double ? cursorWidth;
37033700 final double cursorHeight;
@@ -3727,7 +3724,6 @@ class _MongolEditable extends LeafRenderObjectWidget {
37273724 textAlign: textAlign,
37283725 selection: value.selection,
37293726 offset: offset,
3730- onCaretChanged: onCaretChanged,
37313727 ignorePointer: rendererIgnoresPointer,
37323728 obscuringCharacter: obscuringCharacter,
37333729 obscureText: obscureText,
@@ -3762,7 +3758,6 @@ class _MongolEditable extends LeafRenderObjectWidget {
37623758 ..textAlign = textAlign
37633759 ..selection = value.selection
37643760 ..offset = offset
3765- ..onCaretChanged = onCaretChanged
37663761 ..ignorePointer = rendererIgnoresPointer
37673762 ..obscuringCharacter = obscuringCharacter
37683763 ..obscureText = obscureText
0 commit comments