Skip to content

Commit a69567a

Browse files
Asserts if a TextPainter gets disposed more than once (#145124)
The overflow indicator was sharing the same `TextPainter`.
1 parent 51d59a7 commit a69567a

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

packages/flutter/lib/src/painting/text_painter.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,7 @@ class TextPainter {
16591659
///
16601660
/// After disposal this painter is unusable.
16611661
void dispose() {
1662+
assert(!debugDisposed);
16621663
assert(() {
16631664
_disposed = true;
16641665
return true;

packages/flutter/lib/src/rendering/debug_overflow_indicator.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ mixin DebugOverflowIndicatorMixin on RenderObject {
109109
);
110110
static final Paint _labelBackgroundPaint = Paint()..color = const Color(0xFFFFFFFF);
111111

112-
final List<TextPainter> _indicatorLabel = List<TextPainter>.filled(
112+
final List<TextPainter> _indicatorLabel = List<TextPainter>.generate(
113113
_OverflowSide.values.length,
114-
TextPainter(textDirection: TextDirection.ltr), // This label is in English.
114+
(int i) => TextPainter(textDirection: TextDirection.ltr), // This label is in English.
115+
growable: false,
115116
);
116117

117118
@override

packages/flutter/test/painting/text_painter_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,12 @@ void main() {
14291429
expect(painter.debugDisposed, true);
14301430
});
14311431

1432+
test('TextPainter - asserts if disposed more than once', () {
1433+
final TextPainter painter = TextPainter()..dispose();
1434+
expect(painter.debugDisposed, isTrue);
1435+
expect(painter.dispose, throwsAssertionError);
1436+
});
1437+
14321438
test('TextPainter computeWidth', () {
14331439
const InlineSpan text = TextSpan(text: 'foobar');
14341440
final TextPainter painter = TextPainter(text: text, textDirection: TextDirection.ltr);

0 commit comments

Comments
 (0)