Skip to content

Commit

Permalink
Fix after review
Browse files Browse the repository at this point in the history
  • Loading branch information
Luxorum committed Apr 25, 2023
1 parent 118c1ec commit 2b9be93
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 60 deletions.
29 changes: 24 additions & 5 deletions example/lib/app.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:language_tool/language_tool.dart';
import 'package:languagetool_textfield/domain/mistake.dart';
import 'package:languagetool_textfield/languagetool_textfield.dart';

/// A main screen widget demonstrating library usage example
Expand All @@ -14,11 +15,6 @@ class App extends StatefulWidget {
class _AppState extends State<App> {
final _langToolService = LangToolService(LanguageTool());

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
Expand All @@ -27,6 +23,29 @@ class _AppState extends State<App> {
padding: const EdgeInsets.all(20.0),
child: LanguageToolTextField(
langService: _langToolService,
controller: LanguageToolTextEditingController(
text: 'OKAYOKAYOKAY',
mistakes: [
const Mistake(
message: 'bad',
type: 'bad',
offset: 2,
length: 2,
),
const Mistake(
message: 'bad',
type: 'bad',
offset: 5,
length: 1,
),
const Mistake(
message: 'bad',
type: 'bad',
offset: 7,
length: 3,
),
],
),
style: const TextStyle(),
),
),
Expand Down
1 change: 1 addition & 0 deletions lib/languagetool_textfield.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ library languagetool_textfield;
export 'domain/language_check_service.dart';
export 'implementations/lang_tool_service.dart';
export 'presentation/language_tool_text_field.dart';
export 'presentation/widgets/language_tool_text_editing_controller.dart';
29 changes: 2 additions & 27 deletions lib/presentation/language_tool_text_field.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:languagetool_textfield/domain/language_check_service.dart';
import 'package:languagetool_textfield/domain/mistake.dart';
import 'package:languagetool_textfield/presentation/widgets/language_tool_text_editing_controller.dart';

class LanguageToolTextField extends StatefulWidget {
Expand All @@ -24,34 +23,10 @@ class LanguageToolTextField extends StatefulWidget {
}

class _LanguageToolTextFieldState extends State<LanguageToolTextField> {
final _textFieldController = LanguageToolTextEditingController(
text: 'OkayOkayOkay',
mistakes: [
const Mistake(
message: 'bad',
type: 'bad',
offset: 1,
length: 2,
replacements: ['1'],
),
const Mistake(
message: 'bad',
type: 'bad',
offset: 4,
length: 2,
replacements: ['1'],
),
const Mistake(
message: 'bad',
type: 'bad',
offset: 8,
length: 2,
replacements: ['1'],
),
],
);
static const _borderRadius = 15.0;
static const _borderOpacity = 0.5;

final _textFieldController = LanguageToolTextEditingController();
final _textFieldBorder = OutlineInputBorder(
borderSide: BorderSide(
color: Colors.grey.withOpacity(_borderOpacity),
Expand Down
62 changes: 34 additions & 28 deletions lib/presentation/widgets/language_tool_text_editing_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,43 +27,49 @@ class LanguageToolTextEditingController extends TextEditingController {
return TextSpan(text: text, style: style);
}

for (int i = 0; i < mistakes.length; i++) {
final mistake = mistakes[i];
int previousMistakePosition = 0;
if (i > 0) {
final previousMistake = mistakes[i - 1];
previousMistakePosition =
previousMistake.offset + previousMistake.length;
}
final mistakeStart = mistake.offset;
final mistakeEnd = mistakeStart + mistake.length;
final lastMistakeIndex = mistakes.length - 1;

children.add(
TextSpan(text: text.substring(previousMistakePosition, mistakeStart)),
);
try {
for (int i = 0; i < mistakes.length; i++) {
final mistake = mistakes[i];
int previousMistakePosition = 0;
if (i > 0) {
final previousMistake = mistakes[i - 1];
previousMistakePosition =
previousMistake.offset + previousMistake.length;
}
final mistakeStart = mistake.offset;
final mistakeEnd = mistakeStart + mistake.length;

final textStyle = style ?? const TextStyle();
children.add(
TextSpan(
text: text.substring(mistakeStart, mistakeEnd),
style: textStyle.copyWith(
decoration: TextDecoration.underline,
decorationColor: Colors.red,
decorationThickness: underlineThickness,
backgroundColor: Colors.red.withOpacity(backgroundOpacity),
),
),
);
children.add(
TextSpan(text: text.substring(previousMistakePosition, mistakeStart)),
);

if (i == mistakes.length - 1) {
final textStyle = style ?? const TextStyle();
children.add(
TextSpan(
text: text.substring(
mistakeEnd,
text: text.substring(mistakeStart, mistakeEnd),
style: textStyle.copyWith(
decoration: TextDecoration.underline,
decorationColor: Colors.red,
decorationThickness: underlineThickness,
backgroundColor: Colors.red.withOpacity(backgroundOpacity),
),
),
);

if (i == lastMistakeIndex) {
children.add(
TextSpan(
text: text.substring(
mistakeEnd,
),
),
);
}
}
} catch (e) {
return TextSpan(text: text, style: style);
}

return TextSpan(children: children, style: style);
Expand Down

0 comments on commit 2b9be93

Please sign in to comment.