From 98a5fc8281c1b307a7ca7f9e40ccfdf13889a453 Mon Sep 17 00:00:00 2001 From: Gleb Date: Wed, 26 Apr 2023 12:20:49 +0300 Subject: [PATCH] Add text length check --- ...language_tool_text_editing_controller.dart | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/lib/presentation/widgets/language_tool_text_editing_controller.dart b/lib/presentation/widgets/language_tool_text_editing_controller.dart index dc88ec9..98de964 100644 --- a/lib/presentation/widgets/language_tool_text_editing_controller.dart +++ b/lib/presentation/widgets/language_tool_text_editing_controller.dart @@ -29,47 +29,52 @@ class LanguageToolTextEditingController extends TextEditingController { final lastMistakeIndex = mistakes.length - 1; - 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; + 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; + if (mistakeEnd > text.length) { children.add( - TextSpan(text: text.substring(previousMistakePosition, mistakeStart)), + TextSpan( + text: text.substring(previousMistakePosition), + ), ); + break; + } + + children.add( + TextSpan(text: text.substring(previousMistakePosition, mistakeStart)), + ); - final textStyle = style ?? const TextStyle(); + 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), + ), + ), + ); + + if (i == lastMistakeIndex) { children.add( TextSpan( - text: text.substring(mistakeStart, mistakeEnd), - style: textStyle.copyWith( - decoration: TextDecoration.underline, - decorationColor: Colors.red, - decorationThickness: underlineThickness, - backgroundColor: Colors.red.withOpacity(backgroundOpacity), + text: text.substring( + mistakeEnd, ), ), ); - - if (i == lastMistakeIndex) { - children.add( - TextSpan( - text: text.substring( - mistakeEnd, - ), - ), - ); - } } - } catch (e) { - return TextSpan(text: text, style: style); } return TextSpan(children: children, style: style);