diff --git a/packages/flutter/lib/src/painting/text_painter.dart b/packages/flutter/lib/src/painting/text_painter.dart index 080ae929282..356158a6c99 100644 --- a/packages/flutter/lib/src/painting/text_painter.dart +++ b/packages/flutter/lib/src/painting/text_painter.dart @@ -1659,6 +1659,7 @@ class TextPainter { /// /// After disposal this painter is unusable. void dispose() { + assert(!debugDisposed); assert(() { _disposed = true; return true; diff --git a/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart b/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart index c68caa8874d..cfb0812194e 100644 --- a/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart +++ b/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart @@ -109,9 +109,10 @@ mixin DebugOverflowIndicatorMixin on RenderObject { ); static final Paint _labelBackgroundPaint = Paint()..color = const Color(0xFFFFFFFF); - final List _indicatorLabel = List.filled( + final List _indicatorLabel = List.generate( _OverflowSide.values.length, - TextPainter(textDirection: TextDirection.ltr), // This label is in English. + (int i) => TextPainter(textDirection: TextDirection.ltr), // This label is in English. + growable: false, ); @override diff --git a/packages/flutter/test/painting/text_painter_test.dart b/packages/flutter/test/painting/text_painter_test.dart index 004e306f734..bf1b11da18d 100644 --- a/packages/flutter/test/painting/text_painter_test.dart +++ b/packages/flutter/test/painting/text_painter_test.dart @@ -1429,6 +1429,12 @@ void main() { expect(painter.debugDisposed, true); }); + test('TextPainter - asserts if disposed more than once', () { + final TextPainter painter = TextPainter()..dispose(); + expect(painter.debugDisposed, isTrue); + expect(painter.dispose, throwsAssertionError); + }); + test('TextPainter computeWidth', () { const InlineSpan text = TextSpan(text: 'foobar'); final TextPainter painter = TextPainter(text: text, textDirection: TextDirection.ltr);