From b5c3a9fa6172faacafa7295dcdb5cdb4dfa0baa3 Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:22:06 -0800 Subject: [PATCH] Table implements redepth (#162282) As title ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [ ] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [ ] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --- packages/flutter/lib/src/rendering/table.dart | 6 ++++ packages/flutter/test/widgets/table_test.dart | 30 +++++++++++++++++++ 2 files changed, 36 insertions(+) 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(),