Fixes https://github.com/flutter/flutter/issues/25025
This commit is contained in:
parent
3b47b44348
commit
a4de06ade0
@ -281,15 +281,16 @@ class RenderParagraph extends RenderBox {
|
||||
@override
|
||||
void performLayout() {
|
||||
_layoutTextWithConstraints(constraints);
|
||||
// We grab _textPainter.size here because assigning to `size` will trigger
|
||||
// us to validate our intrinsic sizes, which will change _textPainter's
|
||||
// layout because the intrinsic size calculations are destructive.
|
||||
// Other _textPainter state like didExceedMaxLines will also be affected.
|
||||
// See also RenderEditable which has a similar issue.
|
||||
// We grab _textPainter.size and _textPainter.didExceedMaxLines here because
|
||||
// assigning to `size` will trigger us to validate our intrinsic sizes,
|
||||
// which will change _textPainter's layout because the intrinsic size
|
||||
// calculations are destructive. Other _textPainter state will also be
|
||||
// affected. See also RenderEditable which has a similar issue.
|
||||
final Size textSize = _textPainter.size;
|
||||
final bool didOverflowHeight = _textPainter.didExceedMaxLines;
|
||||
final bool textDidExceedMaxLines = _textPainter.didExceedMaxLines;
|
||||
size = constraints.constrain(textSize);
|
||||
|
||||
final bool didOverflowHeight = size.height < textSize.height || textDidExceedMaxLines;
|
||||
final bool didOverflowWidth = size.width < textSize.width;
|
||||
// TODO(abarth): We're only measuring the sizes of the line boxes here. If
|
||||
// the glyphs draw outside the line boxes, we might think that there isn't
|
||||
|
@ -7,6 +7,7 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import '../rendering/mock_canvas.dart';
|
||||
import 'semantics_tester.dart';
|
||||
|
||||
void main() {
|
||||
@ -246,4 +247,73 @@ void main() {
|
||||
expect(semantics, hasSemantics(expectedSemantics, ignoreTransform: true, ignoreId: true));
|
||||
semantics.dispose();
|
||||
}, skip: true); // TODO(jonahwilliams): correct once https://github.com/flutter/flutter/issues/20891 is resolved.
|
||||
|
||||
|
||||
testWidgets('Overflow is clipping correctly - short text with overflow: clip', (WidgetTester tester) async {
|
||||
await _pumpTextWidget(
|
||||
tester: tester,
|
||||
overflow: TextOverflow.clip,
|
||||
text: 'Hi',
|
||||
);
|
||||
|
||||
expect(find.byType(Text), isNot(paints..clipRect()));
|
||||
});
|
||||
|
||||
testWidgets('Overflow is clipping correctly - long text with overflow: ellipsis', (WidgetTester tester) async {
|
||||
await _pumpTextWidget(
|
||||
tester: tester,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
text: 'a long long long long text, should be clip',
|
||||
);
|
||||
|
||||
expect(find.byType(Text), paints..clipRect(rect: Rect.fromLTWH(0, 0, 50, 50)));
|
||||
});
|
||||
|
||||
testWidgets('Overflow is clipping correctly - short text with overflow: ellipsis', (WidgetTester tester) async {
|
||||
await _pumpTextWidget(
|
||||
tester: tester,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
text: 'Hi',
|
||||
);
|
||||
|
||||
expect(find.byType(Text), isNot(paints..clipRect()));
|
||||
});
|
||||
|
||||
testWidgets('Overflow is clipping correctly - long text with overflow: fade', (WidgetTester tester) async {
|
||||
await _pumpTextWidget(
|
||||
tester: tester,
|
||||
overflow: TextOverflow.fade,
|
||||
text: 'a long long long long text, should be clip',
|
||||
);
|
||||
|
||||
expect(find.byType(Text), paints..clipRect(rect: Rect.fromLTWH(0, 0, 50, 50)));
|
||||
});
|
||||
|
||||
testWidgets('Overflow is clipping correctly - short text with overflow: fade', (WidgetTester tester) async {
|
||||
await _pumpTextWidget(
|
||||
tester: tester,
|
||||
overflow: TextOverflow.fade,
|
||||
text: 'Hi',
|
||||
);
|
||||
|
||||
expect(find.byType(Text), isNot(paints..clipRect()));
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _pumpTextWidget({ WidgetTester tester, String text, TextOverflow overflow }) {
|
||||
return tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: Center(
|
||||
child: Container(
|
||||
width: 50.0,
|
||||
height: 50.0,
|
||||
child: Text(
|
||||
text,
|
||||
overflow: overflow,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user