@@ -22,20 +22,6 @@ class LanguageToolController extends TextEditingController {
2222 /// Color scheme to highlight mistakes
2323 final HighlightStyle highlightStyle;
2424
25- /// Represents the type of delay for language checking.
26- ///
27- /// [DelayType.debouncing] - Calls a function when a user hasn't carried out
28- /// the event in a specific amount of time.
29- ///
30- /// [DelayType.throttling] - Calls a function at intervals of a specified
31- /// amount of time while the user is carrying out the event.
32- final DelayType delayType;
33-
34- /// Represents the duration of the delay for language checking.
35- ///
36- /// If the delay is [Duration.zero] , no delaying is applied.
37- final Duration delay;
38-
3925 /// Create an instance of [LanguageToolClient] instance
4026 final _languageToolClient = LanguageToolClient ();
4127
@@ -83,16 +69,51 @@ class LanguageToolController extends TextEditingController {
8369 }
8470
8571 /// Controller constructor
72+ ///
73+ /// [highlightStyle] - Color scheme to highlight mistakes
74+ /// [delayType] - Represents the type of delay for language checking.
75+ ///
76+ /// [DelayType.debouncing] - Calls a function when a user hasn't carried out
77+ /// the event in a specific amount of time.
78+ ///
79+ /// [DelayType.throttling] - Calls a function at intervals of a specified
80+ /// amount of time while the user is carrying out the event.
81+ /// [delay] - Represents the duration of the delay for language checking.
82+ ///
83+ /// If the delay is [Duration.zero] , no delaying is applied.
8684 LanguageToolController ({
8785 this .highlightStyle = const HighlightStyle (),
88- this .delay = Duration .zero ,
89- this .delayType = DelayType .debouncing ,
86+ DelayType delayType = DelayType .debouncing ,
87+ Duration delay = Duration .zero ,
9088 }) {
91- _languageCheckService = _getLanguageCheckService ();
89+ _languageCheckService = _getLanguageCheckService (
90+ delayType: delayType,
91+ delay: delay,
92+ languageToolClient: _languageToolClient,
93+ );
9294 }
9395
94- LanguageCheckService _getLanguageCheckService () {
95- final languageToolService = LangToolService (_languageToolClient);
96+ /// Creates a [LanguageToolController] with a custom [LanguageCheckService] .
97+ ///
98+ /// This constructor allows you to provide your own implementation of the
99+ /// language checking service, giving you full control over how text is
100+ /// analyzed and processed.
101+ ///
102+ /// Parameters:
103+ /// * [languageCheckService] - The service responsible for performing language
104+ /// checks and grammar validation. This parameter is required.
105+ /// * [highlightStyle] - Color scheme to highlight mistakes
106+ LanguageToolController .withService ({
107+ required LanguageCheckService languageCheckService,
108+ this .highlightStyle = const HighlightStyle (),
109+ }) : _languageCheckService = languageCheckService;
110+
111+ static LanguageCheckService _getLanguageCheckService ({
112+ required DelayType delayType,
113+ required Duration delay,
114+ required LanguageToolClient languageToolClient,
115+ }) {
116+ final languageToolService = LangToolService (languageToolClient);
96117
97118 if (delay == Duration .zero) return languageToolService;
98119
@@ -111,8 +132,8 @@ class LanguageToolController extends TextEditingController {
111132 @override
112133 TextSpan buildTextSpan ({
113134 required BuildContext context,
114- TextStyle ? style,
115135 required bool withComposing,
136+ TextStyle ? style,
116137 }) {
117138 final formattedTextSpans = _generateSpans (
118139 context,
@@ -200,7 +221,7 @@ class LanguageToolController extends TextEditingController {
200221 final Color mistakeColor = _getMistakeColor (mistake.type);
201222
202223 /// Create a gesture recognizer for mistake
203- final _onTap = TapGestureRecognizer ()
224+ final onTap = TapGestureRecognizer ()
204225 ..onTapDown = (details) {
205226 popupWidget? .show (
206227 context,
@@ -223,7 +244,7 @@ class LanguageToolController extends TextEditingController {
223244 };
224245
225246 /// Adding recognizer to the list for future disposing
226- _recognizers.add (_onTap );
247+ _recognizers.add (onTap );
227248
228249 /// Mistake highlighted TextSpan
229250 yield TextSpan (
@@ -242,7 +263,7 @@ class LanguageToolController extends TextEditingController {
242263 decorationColor: mistakeColor,
243264 decorationThickness: highlightStyle.mistakeLineThickness,
244265 ),
245- recognizer: _onTap ,
266+ recognizer: onTap ,
246267 ),
247268 ],
248269 );
0 commit comments