diff --git a/packages/flutter/lib/src/rendering/table.dart b/packages/flutter/lib/src/rendering/table.dart index 8d3f891a4f2..f90c7c293df 100644 --- a/packages/flutter/lib/src/rendering/table.dart +++ b/packages/flutter/lib/src/rendering/table.dart @@ -761,6 +761,12 @@ class RenderTable extends RenderBox { } } + @protected + @override + void redepthChildren() { + visitChildren(redepthChild); + } + @override double computeMinIntrinsicWidth(double height) { assert(_children.length == rows * columns); diff --git a/packages/flutter/test/widgets/table_test.dart b/packages/flutter/test/widgets/table_test.dart index 66bc9af9cbf..868a6ca777b 100644 --- a/packages/flutter/test/widgets/table_test.dart +++ b/packages/flutter/test/widgets/table_test.dart @@ -71,6 +71,36 @@ void main() { await run(TextDirection.rtl); }); + testWidgets('Table widget calculate depth', (WidgetTester tester) async { + final UniqueKey outerTable = UniqueKey(); + final UniqueKey innerTable = UniqueKey(); + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Table( + key: outerTable, + children: [ + TableRow( + children: [ + Table( + key: innerTable, + children: const [ + TableRow(children: [Text('AAAAAA'), Text('B'), Text('C')]), + ], + ), + ], + ), + ], + ), + ), + ); + final RenderObject outerTableRenderObject = tester.renderObject(find.byKey(outerTable)); + final RenderObject innerTableRenderObject = tester.renderObject(find.byKey(innerTable)); + final RenderObject textRenderObject = tester.renderObject(find.text('AAAAAA')); + expect(outerTableRenderObject.depth + 1, innerTableRenderObject.depth); + expect(innerTableRenderObject.depth + 1, textRenderObject.depth); + }); + testWidgets('Table widget can be detached and re-attached', (WidgetTester tester) async { final Widget table = Table( key: GlobalKey(),