diff --git a/lib/widgets/markdown_toolbar.dart b/lib/widgets/markdown_toolbar.dart index db6d2bae..94a3499e 100644 --- a/lib/widgets/markdown_toolbar.dart +++ b/lib/widgets/markdown_toolbar.dart @@ -302,19 +302,14 @@ int prevWordPos(TextEditingValue textEditingValue) { return lastSpacePos + 1; } +var indentStr = '\t'; + TextEditingValue addTab(TextEditingValue textEditingValue) { var cursorPos = textEditingValue.selection.baseOffset; var text = textEditingValue.text; - var newText = ""; - if (cursorPos == text.length) { - newText = text + "\t"; - } else { - newText = text.substring(0, cursorPos) + "\t" + text.substring(cursorPos); - } - return TextEditingValue( - text: newText, + text: indentStr + text, selection: TextSelection.collapsed(offset: cursorPos + 1), ); } @@ -323,25 +318,14 @@ TextEditingValue addBackTab(TextEditingValue textEditingValue) { var cursorPos = textEditingValue.selection.baseOffset; var text = textEditingValue.text; - if (cursorPos <= 0) { - return textEditingValue; + var newText = text; + if (newText.startsWith(indentStr)) { + newText = newText.substring(indentStr.length); + cursorPos -= indentStr.length; } - var prevChar = text[cursorPos - 1]; - if (prevChar == '\t') { - var newText = ""; - if (cursorPos - 1 > 1) { - newText += text.substring(0, cursorPos - 1); - } - if (cursorPos != text.length) { - newText += text.substring(cursorPos); - } - - return TextEditingValue( - text: newText, - selection: TextSelection.collapsed(offset: cursorPos - 1), - ); - } - - return textEditingValue; + return TextEditingValue( + text: newText, + selection: TextSelection.collapsed(offset: cursorPos), + ); } diff --git a/test/markdown_toolbar_test.dart b/test/markdown_toolbar_test.dart index 2094f2f8..a0c880f5 100644 --- a/test/markdown_toolbar_test.dart +++ b/test/markdown_toolbar_test.dart @@ -321,17 +321,24 @@ void main() { _testTab( before: 'Hello', beforeOffset: 1, - after: 'H\tello', + after: '\tHello', afterOffset: 2, ); _testTab( before: 'Hi', beforeOffset: 2, - after: 'Hi\t', + after: '\tHi', afterOffset: 3, ); + _testTab( + before: '- Hi', + beforeOffset: 4, + after: '\t- Hi', + afterOffset: 5, + ); + _testBackTab( before: '\tHello', beforeOffset: 1, @@ -339,6 +346,13 @@ void main() { afterOffset: 0, ); + _testBackTab( + before: '\tHello', + beforeOffset: 4, + after: 'Hello', + afterOffset: 3, + ); + _testBackTab( before: 'Hi', beforeOffset: 0,