未验证 提交 d132ac57 编写于 作者: M Mouad Debbar 提交者: GitHub

[web] Fix exception when getting boxes for rich text range (#17933)

上级 cade0e90
......@@ -359,13 +359,23 @@ class EngineParagraph implements ui.Paragraph {
}) {
assert(boxHeightStyle != null);
assert(boxWidthStyle != null);
if (_plainText == null || start == end) {
// Zero-length ranges and invalid ranges return an empty list.
if (start == end || start < 0 || end < 0) {
return <ui.TextBox>[];
}
// For rich text, we can't measure the boxes. So for now, we'll just return
// a placeholder box to stop exceptions from being thrown in the framework.
// https://github.com/flutter/flutter/issues/55587
if (_plainText == null) {
return <ui.TextBox>[
ui.TextBox.fromLTRBD(0, 0, 0, _lineHeight, _textDirection)
];
}
final int length = _plainText.length;
// Ranges that are out of bounds should return an empty list.
if (start < 0 || end < 0 || start > length || end > length) {
if (start > length || end > length) {
return <ui.TextBox>[];
}
......
......@@ -415,6 +415,25 @@ void main() async {
);
});
testEachMeasurement('getBoxesForRange returns a box for rich text', () {
final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle(
fontFamily: 'Ahem',
fontStyle: FontStyle.normal,
fontWeight: FontWeight.normal,
fontSize: 10,
textDirection: TextDirection.ltr,
));
builder.addText('abcd');
builder.pushStyle(TextStyle(fontWeight: FontWeight.bold));
builder.addText('xyz');
final Paragraph paragraph = builder.build();
paragraph.layout(const ParagraphConstraints(width: 1000));
expect(
paragraph.getBoxesForRange(1, 2).single,
const TextBox.fromLTRBD(0, 0, 0, 10, TextDirection.ltr),
);
});
testEachMeasurement(
'getBoxesForRange return empty list for zero-length range', () {
final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册