Skip to content

Commit

Permalink
Fixes after review
Browse files Browse the repository at this point in the history
  • Loading branch information
Luxorum committed Apr 25, 2023
1 parent 5e5da57 commit 118c1ec
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 15 deletions.
4 changes: 2 additions & 2 deletions example/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:language_tool/language_tool.dart';
import 'package:languagetool_textfield/languagetool_textfield.dart';

/// Main screen widget demonstrating library usage example
/// A main screen widget demonstrating library usage example
class App extends StatefulWidget {
/// Creates a new instance of main screen widget
const App({super.key});
Expand All @@ -12,7 +12,7 @@ class App extends StatefulWidget {
}

class _AppState extends State<App> {
final LangToolService _langToolService = LangToolService(LanguageTool());
final _langToolService = LangToolService(LanguageTool());

@override
void initState() {
Expand Down
11 changes: 7 additions & 4 deletions lib/presentation/language_tool_text_field.dart
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
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/custom_text_field_controller.dart';
import 'package:languagetool_textfield/presentation/widgets/language_tool_text_editing_controller.dart';

class LanguageToolTextField extends StatefulWidget {
final LanguageCheckService langService;
final TextStyle style;
final TextStyle? style;
final InputDecoration? decoration;
final Widget Function()? mistakeBuilder;
final LanguageToolTextEditingController? controller;

const LanguageToolTextField({
Key? key,
required this.langService,
required this.style,
this.decoration,
this.mistakeBuilder,
this.controller,
}) : super(key: key);

@override
State<LanguageToolTextField> createState() => _LanguageToolTextFieldState();
}

class _LanguageToolTextFieldState extends State<LanguageToolTextField> {
final _textFieldController = CustomTextFieldController(
final _textFieldController = LanguageToolTextEditingController(
text: 'OkayOkayOkay',
mistakes: [
const Mistake(
Expand Down Expand Up @@ -65,13 +67,14 @@ class _LanguageToolTextFieldState extends State<LanguageToolTextField> {
textCapitalization: TextCapitalization.none,
keyboardType: TextInputType.multiline,
maxLines: null,
style: widget.style,
decoration: widget.decoration ??
InputDecoration(
focusedBorder: _textFieldBorder,
enabledBorder: _textFieldBorder,
border: _textFieldBorder,
),
controller: _textFieldController,
controller: widget.controller ?? _textFieldController,
);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import 'package:flutter/material.dart';
import 'package:languagetool_textfield/domain/mistake.dart';

/// Custom controller for an editable text field, that supports
/// A custom controller for an editable text field, that supports
/// mistakes highlighting.
class CustomTextFieldController extends TextEditingController {
/// List of mistakes in text.
class LanguageToolTextEditingController extends TextEditingController {
/// A list of mistakes in the text.
final List<Mistake> mistakes;

/// Creates a controller for an editable text field.
CustomTextFieldController({
LanguageToolTextEditingController({
String? text,
this.mistakes = const [],
}) : super(text: text);
Expand All @@ -19,7 +19,7 @@ class CustomTextFieldController extends TextEditingController {
TextStyle? style,
required bool withComposing,
}) {
final List<TextSpan> children = [];
final children = <TextSpan>[];
const underlineThickness = 2.0;
const backgroundOpacity = 0.2;

Expand All @@ -29,19 +29,24 @@ class CustomTextFieldController extends TextEditingController {

for (int i = 0; i < mistakes.length; i++) {
final mistake = mistakes[i];
final previousMistakePosition =
i > 0 ? mistakes[i - 1].offset + mistakes[i - 1].length : 0;
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;

children.add(
TextSpan(text: text.substring(previousMistakePosition, mistakeStart)),
);

final textStyle = style ?? const TextStyle();
children.add(
TextSpan(
text: text.substring(mistakeStart, mistakeEnd),
style: TextStyle(
style: textStyle.copyWith(
decoration: TextDecoration.underline,
decorationColor: Colors.red,
decorationThickness: underlineThickness,
Expand All @@ -50,7 +55,7 @@ class CustomTextFieldController extends TextEditingController {
),
);

if (mistake == mistakes.last) {
if (i == mistakes.length - 1) {
children.add(
TextSpan(
text: text.substring(
Expand Down

0 comments on commit 118c1ec

Please sign in to comment.