@@ -19,6 +19,8 @@ import 'package:languagetool_textfield/src/utils/mistake_popup.dart';
1919/// A TextEditingController with overrides buildTextSpan for building
2020/// marked TextSpans with tap recognizer
2121class LanguageToolController extends TextEditingController {
22+ bool _isEnabled;
23+
2224 /// Color scheme to highlight mistakes
2325 final HighlightStyle highlightStyle;
2426
@@ -73,21 +75,38 @@ class LanguageToolController extends TextEditingController {
7375 _languageToolClient.language = language;
7476 }
7577
78+ /// Indicates whether spell checking is enabled
79+ bool get isEnabled => _isEnabled;
80+
81+ set isEnabled (bool value) {
82+ _isEnabled = value;
83+
84+ if (_isEnabled) {
85+ _handleTextChange (text, force: true );
86+ } else {
87+ notifyListeners ();
88+ }
89+ }
90+
7691 /// An error that may have occurred during the API fetch.
7792 Object ? get fetchError => _fetchError;
7893
7994 @override
8095 set value (TextEditingValue newValue) {
81- _handleTextChange (newValue.text);
96+ if (_isEnabled) {
97+ _handleTextChange (newValue.text);
98+ }
99+
82100 super .value = newValue;
83101 }
84102
85103 /// Controller constructor
86104 LanguageToolController ({
105+ bool isEnabled = true ,
87106 this .highlightStyle = const HighlightStyle (),
88107 this .delay = Duration .zero,
89108 this .delayType = DelayType .debouncing,
90- }) {
109+ }) : _isEnabled = isEnabled {
91110 _languageCheckService = _getLanguageCheckService ();
92111 }
93112
@@ -111,9 +130,17 @@ class LanguageToolController extends TextEditingController {
111130 @override
112131 TextSpan buildTextSpan ({
113132 required BuildContext context,
114- TextStyle ? style,
115133 required bool withComposing,
134+ TextStyle ? style,
116135 }) {
136+ if (! _isEnabled) {
137+ return super .buildTextSpan (
138+ context: context,
139+ withComposing: withComposing,
140+ style: style,
141+ );
142+ }
143+
117144 final formattedTextSpans = _generateSpans (
118145 context,
119146 style: style,
@@ -132,6 +159,10 @@ class LanguageToolController extends TextEditingController {
132159
133160 /// Replaces mistake with given replacement
134161 void replaceMistake (Mistake mistake, String replacement) {
162+ if (! _isEnabled) {
163+ throw Exception ('LanguageToolController is not enabled' );
164+ }
165+
135166 final mistakes = List <Mistake >.from (_mistakes);
136167 mistakes.remove (mistake);
137168 _mistakes = mistakes;
@@ -145,10 +176,10 @@ class LanguageToolController extends TextEditingController {
145176
146177 /// Clear mistakes list when text mas modified and get a new list of mistakes
147178 /// via API
148- Future <void > _handleTextChange (String newText) async {
179+ Future <void > _handleTextChange (String newText, { bool force = false } ) async {
149180 ///set value triggers each time, even when cursor changes its location
150181 ///so this check avoid cleaning Mistake list when text wasn't really changed
151- if (newText == text || newText.isEmpty) return ;
182+ if (! force && ( newText == text || newText.isEmpty) ) return ;
152183
153184 final filteredMistakes = _filterMistakesOnChanged (newText);
154185 _mistakes = filteredMistakes.toList ();
@@ -200,7 +231,7 @@ class LanguageToolController extends TextEditingController {
200231 final Color mistakeColor = _getMistakeColor (mistake.type);
201232
202233 /// Create a gesture recognizer for mistake
203- final _onTap = TapGestureRecognizer ()
234+ final onTap = TapGestureRecognizer ()
204235 ..onTapDown = (details) {
205236 popupWidget? .show (
206237 context,
@@ -223,7 +254,7 @@ class LanguageToolController extends TextEditingController {
223254 };
224255
225256 /// Adding recognizer to the list for future disposing
226- _recognizers.add (_onTap );
257+ _recognizers.add (onTap );
227258
228259 /// Mistake highlighted TextSpan
229260 yield TextSpan (
@@ -242,7 +273,7 @@ class LanguageToolController extends TextEditingController {
242273 decorationColor: mistakeColor,
243274 decorationThickness: highlightStyle.mistakeLineThickness,
244275 ),
245- recognizer: _onTap ,
276+ recognizer: onTap ,
246277 ),
247278 ],
248279 );
0 commit comments