@@ -3,18 +3,10 @@ import 'dart:math';
33import 'package:collection/collection.dart' ;
44import 'package:flutter/gestures.dart' ;
55import 'package:flutter/material.dart' ;
6- import 'package:languagetool_textfield/src/client/language_tool_client.dart' ;
7- import 'package:languagetool_textfield/src/core/enums/delay_type.dart' ;
6+ import 'package:languagetool_textfield/languagetool_textfield.dart' ;
87import 'package:languagetool_textfield/src/core/enums/mistake_type.dart' ;
9- import 'package:languagetool_textfield/src/domain/highlight_style.dart' ;
10- import 'package:languagetool_textfield/src/domain/language_check_service.dart' ;
11- import 'package:languagetool_textfield/src/domain/mistake.dart' ;
12- import 'package:languagetool_textfield/src/implementations/debounce_lang_tool_service.dart' ;
13- import 'package:languagetool_textfield/src/implementations/lang_tool_service.dart' ;
14- import 'package:languagetool_textfield/src/implementations/throttling_lang_tool_service.dart' ;
158import 'package:languagetool_textfield/src/utils/closed_range.dart' ;
169import 'package:languagetool_textfield/src/utils/keep_latest_response_service.dart' ;
17- import 'package:languagetool_textfield/src/utils/mistake_popup.dart' ;
1810
1911/// A TextEditingController with overrides buildTextSpan for building
2012/// marked TextSpans with tap recognizer
@@ -24,23 +16,6 @@ class LanguageToolController extends TextEditingController {
2416 /// Color scheme to highlight mistakes
2517 final HighlightStyle highlightStyle;
2618
27- /// Represents the type of delay for language checking.
28- ///
29- /// [DelayType.debouncing] - Calls a function when a user hasn't carried out
30- /// the event in a specific amount of time.
31- ///
32- /// [DelayType.throttling] - Calls a function at intervals of a specified
33- /// amount of time while the user is carrying out the event.
34- final DelayType delayType;
35-
36- /// Represents the duration of the delay for language checking.
37- ///
38- /// If the delay is [Duration.zero] , no delaying is applied.
39- final Duration delay;
40-
41- /// Create an instance of [LanguageToolClient] instance
42- final _languageToolClient = LanguageToolClient ();
43-
4419 /// Create an instance of [KeepLatestResponseService]
4520 /// to handle asynchronous operations
4621 final _latestResponseService = KeepLatestResponseService ();
@@ -69,10 +44,10 @@ class LanguageToolController extends TextEditingController {
6944 ///
7045 /// A language code like en-US, de-DE, fr, or auto to guess
7146 /// the language automatically.
72- String get language => _languageToolClient .language;
47+ String get language => _languageCheckService ? .language ?? 'auto' ;
7348
7449 set language (String language) {
75- _languageToolClient .language = language;
50+ _languageCheckService ? .language = language;
7651 }
7752
7853 /// Indicates whether spell checking is enabled
@@ -108,26 +83,51 @@ class LanguageToolController extends TextEditingController {
10883 super .value = newValue;
10984 }
11085
111- /// Controller constructor
86+ /// Controller constructor.
87+ ///
88+ /// [highlightStyle] - Color scheme to highlight mistakes.
89+ ///
90+ /// [delayType] - Represents the type of delay for language checking.
91+ /// [DelayType.debouncing] - Calls a function when a user hasn't carried out
92+ /// the event in a specific amount of time.
93+ /// [DelayType.throttling] - Calls a function at intervals of a specified
94+ /// amount of time while the user is carrying out the event.
95+ ///
96+ /// [delay] - Represents the duration of the delay for language checking.
97+ /// If the delay is [Duration.zero] , no delaying is applied.
98+ ///
99+ /// You can optionally provide a custom [languageCheckService] to fully control
100+ /// how text is analyzed and processed. When provided, [delayType] and [delay]
101+ /// are ignored.
112102 LanguageToolController ({
113103 bool isEnabled = true ,
114104 this .highlightStyle = const HighlightStyle (),
115- this .delay = Duration .zero,
116- this .delayType = DelayType .debouncing,
105+ DelayType delayType = DelayType .debouncing,
106+ Duration delay = Duration .zero,
107+ LanguageCheckService ? languageCheckService,
117108 }) : _isEnabled = isEnabled {
118- _languageCheckService = _getLanguageCheckService ();
109+ _languageCheckService = languageCheckService ??
110+ _getLanguageCheckService (
111+ delayType: delayType,
112+ delay: delay,
113+ languageToolClient: LanguageToolClient (),
114+ );
119115 }
120116
121- LanguageCheckService _getLanguageCheckService () {
122- final languageToolService = LangToolService (_languageToolClient);
117+ static LanguageCheckService _getLanguageCheckService ({
118+ required DelayType delayType,
119+ required Duration delay,
120+ required LanguageToolClient languageToolClient,
121+ }) {
122+ final languageToolService = LanguageToolService (languageToolClient);
123123
124124 if (delay == Duration .zero) return languageToolService;
125125
126126 switch (delayType) {
127127 case DelayType .debouncing:
128- return DebounceLangToolService (languageToolService, delay);
128+ return DebounceLanguageCheckService (languageToolService, delay);
129129 case DelayType .throttling:
130- return ThrottlingLangToolService (languageToolService, delay);
130+ return ThrottlingLanguageCheckService (languageToolService, delay);
131131 }
132132 }
133133
0 commit comments