Skip to content

Commit 777f3da

Browse files
feat: allow overriding languageCheckService
style: no leading underscores for local identifiers
1 parent 16e9371 commit 777f3da

File tree

1 file changed

+44
-23
lines changed

1 file changed

+44
-23
lines changed

lib/src/core/controllers/language_tool_controller.dart

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)