diff --git a/packages/flutter/lib/src/painting/text_painter.dart b/packages/flutter/lib/src/painting/text_painter.dart index 0b88b585e9..225ab981b8 100644 --- a/packages/flutter/lib/src/painting/text_painter.dart +++ b/packages/flutter/lib/src/painting/text_painter.dart @@ -229,4 +229,9 @@ class TextPainter { return _paragraph.getPositionForOffset(offset); } + TextRange getWordBoundary(TextPosition position) { + assert(!_needsLayout); + List indices = _paragraph.getWordBoundary(position.offset); + return new TextRange(start: indices[0], end: indices[1]); + } } diff --git a/packages/flutter/lib/src/rendering/editable_line.dart b/packages/flutter/lib/src/rendering/editable_line.dart index 24bcd417df..e30fd7b4b7 100644 --- a/packages/flutter/lib/src/rendering/editable_line.dart +++ b/packages/flutter/lib/src/rendering/editable_line.dart @@ -232,19 +232,8 @@ class RenderEditableLine extends RenderBox { } TextSelection _selectWordAtOffset(TextPosition position) { - // TODO(mpcomplete): Placeholder. Need to ask the engine for this info to do - // it correctly. - String str = text.toPlainText(); - int start = position.offset - 1; - while (start >= 0 && str[start] != ' ') - --start; - ++start; - - int end = position.offset; - while (end < str.length && str[end] != ' ') - ++end; - - return new TextSelection(baseOffset: start, extentOffset: end); + TextRange word = _textPainter.getWordBoundary(position); + return new TextSelection(baseOffset: word.start, extentOffset: word.end); } Rect _caretPrototype;