From eaa41cff504052af792e4ee2d734a297634c0eca Mon Sep 17 00:00:00 2001 From: baumths Date: Tue, 4 Jun 2024 09:17:28 -0300 Subject: [PATCH 1/9] add generics to TreeView callbacks --- .../two_dimensional_scrollables/lib/src/tree_view/tree.dart | 6 +++--- .../lib/src/tree_view/tree_core.dart | 2 +- .../lib/src/tree_view/tree_delegate.dart | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart index 33257e1e7b1d..ba6c4632c408 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/tree.dart @@ -338,14 +338,14 @@ class TreeView extends StatefulWidget { /// /// By default, if this is unset, the [TreeView.defaultTreeNodeBuilder] is /// used. - final TreeViewNodeBuilder treeNodeBuilder; + final TreeViewNodeBuilder treeNodeBuilder; /// Builds the [TreeRow] that describes the row for the provided /// [TreeViewNode]. /// /// By default, if this is unset, the [TreeView.defaultTreeRowBuilder] /// is used. - final TreeViewRowBuilder treeRowBuilder; + final TreeViewRowBuilder treeRowBuilder; /// If provided, the controller can be used to expand and collapse /// [TreeViewNode]s, or lookup information about the current state of the @@ -360,7 +360,7 @@ class TreeView extends StatefulWidget { /// a result of being toggled. /// /// This will not be called if a [TreeViewNode] does not have any children. - final TreeViewNodeCallback? onNodeToggle; + final TreeViewNodeCallback? onNodeToggle; /// The default [AnimationStyle] for expanding and collapsing nodes in the /// [TreeView]. diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/tree_core.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/tree_core.dart index f853cd88e283..2c4caea45e3d 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/tree_core.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/tree_core.dart @@ -21,7 +21,7 @@ import 'tree.dart'; /// /// * [TreeViewNode.toggleNode], for controlling node expansion /// programmatically. -typedef TreeViewNodeCallback = void Function(TreeViewNode node); +typedef TreeViewNodeCallback = void Function(TreeViewNode node); /// A mixin for classes implementing a tree structure as expected by a /// [TreeViewController]. diff --git a/packages/two_dimensional_scrollables/lib/src/tree_view/tree_delegate.dart b/packages/two_dimensional_scrollables/lib/src/tree_view/tree_delegate.dart index 3cac931ed4c7..c96bc7897138 100644 --- a/packages/two_dimensional_scrollables/lib/src/tree_view/tree_delegate.dart +++ b/packages/two_dimensional_scrollables/lib/src/tree_view/tree_delegate.dart @@ -12,16 +12,16 @@ import 'tree_span.dart'; /// /// Used by the [TreeViewDelegateMixin.buildRow] to configure rows in the /// [TreeView]. -typedef TreeViewRowBuilder = TreeRow Function(TreeViewNode node); +typedef TreeViewRowBuilder = TreeRow Function(TreeViewNode node); /// Signature for a function that creates a [Widget] to represent the given /// [TreeViewNode] in the [TreeView]. /// /// Used by [TreeView.treeRowBuilder] to build rows on demand for the /// tree. -typedef TreeViewNodeBuilder = Widget Function( +typedef TreeViewNodeBuilder = Widget Function( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ); From da7a9eb8fc01297b0f7472983097b0b60843773f Mon Sep 17 00:00:00 2001 From: baumths Date: Tue, 4 Jun 2024 09:18:16 -0300 Subject: [PATCH 2/9] remove type casts from TreeView example --- .../example/lib/tree_view/custom_tree.dart | 12 ++++++------ .../example/lib/tree_view/simple_tree.dart | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/two_dimensional_scrollables/example/lib/tree_view/custom_tree.dart b/packages/two_dimensional_scrollables/example/lib/tree_view/custom_tree.dart index 2cbaf0417783..cbca2fb35dd3 100644 --- a/packages/two_dimensional_scrollables/example/lib/tree_view/custom_tree.dart +++ b/packages/two_dimensional_scrollables/example/lib/tree_view/custom_tree.dart @@ -105,7 +105,7 @@ class CustomTreeExampleState extends State { Widget _treeNodeBuilder( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { final bool isParentNode = node.children.isNotEmpty; @@ -144,7 +144,7 @@ class CustomTreeExampleState extends State { // Spacer const SizedBox(width: 8.0), // Content - Text(node.content.toString()), + Text(node.content), ], ); } @@ -188,14 +188,14 @@ class CustomTreeExampleState extends State { controller: _horizontalController, ), tree: _tree, - onNodeToggle: (TreeViewNode node) { + onNodeToggle: (TreeViewNode node) { setState(() { - _selectedNode = node as TreeViewNode; + _selectedNode = node; }); }, treeNodeBuilder: _treeNodeBuilder, - treeRowBuilder: (TreeViewNode node) { - if (_selectedNode == (node as TreeViewNode)) { + treeRowBuilder: (TreeViewNode node) { + if (_selectedNode == node) { return TreeRow( extent: FixedTreeRowExtent( node.children.isNotEmpty ? 60.0 : 50.0, diff --git a/packages/two_dimensional_scrollables/example/lib/tree_view/simple_tree.dart b/packages/two_dimensional_scrollables/example/lib/tree_view/simple_tree.dart index bb6c6767308b..c5e0fe85a8c9 100644 --- a/packages/two_dimensional_scrollables/example/lib/tree_view/simple_tree.dart +++ b/packages/two_dimensional_scrollables/example/lib/tree_view/simple_tree.dart @@ -100,13 +100,13 @@ class TreeExampleState extends State { controller: horizontalController, ), tree: _tree, - onNodeToggle: (TreeViewNode node) { + onNodeToggle: (TreeViewNode node) { setState(() { - _selectedNode = node as TreeViewNode; + _selectedNode = node; }); }, - treeRowBuilder: (TreeViewNode node) { - if (_selectedNode == (node as TreeViewNode)) { + treeRowBuilder: (TreeViewNode node) { + if (_selectedNode == node) { return TreeView.defaultTreeRowBuilder(node).copyWith( recognizerFactories: _getTapRecognizer(node), backgroundDecoration: TreeRowDecoration( From e0d3ee7ca862091e226de4cbd0331c6fc096f22e Mon Sep 17 00:00:00 2001 From: baumths Date: Tue, 4 Jun 2024 09:52:52 -0300 Subject: [PATCH 3/9] update release info --- packages/two_dimensional_scrollables/CHANGELOG.md | 4 ++++ packages/two_dimensional_scrollables/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index 02fedb16e7ea..c793dda7192a 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.0+1 + +* Adds generics to the callbacks and builders of TreeView. + ## 0.3.0 * Adds new TreeView widget and associated classes. diff --git a/packages/two_dimensional_scrollables/pubspec.yaml b/packages/two_dimensional_scrollables/pubspec.yaml index 4c48c55b65b3..8f85f53d5546 100644 --- a/packages/two_dimensional_scrollables/pubspec.yaml +++ b/packages/two_dimensional_scrollables/pubspec.yaml @@ -1,6 +1,6 @@ name: two_dimensional_scrollables description: Widgets that scroll using the two dimensional scrolling foundation. -version: 0.3.0 +version: 0.3.0+1 repository: https://github.com/flutter/packages/tree/main/packages/two_dimensional_scrollables issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+two_dimensional_scrollables%22+ From f8360105aa1da5f4ff782aa30bee11b2ff28e7f8 Mon Sep 17 00:00:00 2001 From: baumths Date: Tue, 4 Jun 2024 13:15:57 -0300 Subject: [PATCH 4/9] add unit test --- .../test/tree_view/tree_test.dart | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart index bf8924a8ae81..846962b0bd62 100644 --- a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart +++ b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart @@ -693,6 +693,31 @@ void main() { expect(find.text('Child 2:1'), findsNothing); expect(find.text('Root 3'), findsOneWidget); }); + + test('should use the generic type for callbacks and builders', () { + Widget createTreeView() { + return TreeView( + tree: simpleNodeSet, + treeNodeBuilder: ( + BuildContext context, + TreeViewNode node, + AnimationStyle animationStyle, + ) { + return TreeView.defaultTreeNodeBuilder( + context, + node, + animationStyle, + ); + }, + treeRowBuilder: (TreeViewNode node) { + return TreeView.defaultTreeRowBuilder(node); + }, + onNodeToggle: (TreeViewNode node) {}, + ); + } + + expect(createTreeView, returnsNormally); + }); }); group('TreeViewport', () { From 99b8ed8a75714b3c606a48f723eebd4451a20e38 Mon Sep 17 00:00:00 2001 From: baumths Date: Tue, 4 Jun 2024 13:22:37 -0300 Subject: [PATCH 5/9] use generic types in TreeView tests --- .../test/tree_view/render_tree_test.dart | 10 +++---- .../test/tree_view/tree_test.dart | 26 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/two_dimensional_scrollables/test/tree_view/render_tree_test.dart b/packages/two_dimensional_scrollables/test/tree_view/render_tree_test.dart index 71d531e667c3..3b239380d53f 100644 --- a/packages/two_dimensional_scrollables/test/tree_view/render_tree_test.dart +++ b/packages/two_dimensional_scrollables/test/tree_view/render_tree_test.dart @@ -141,10 +141,10 @@ void main() { final List log = []; final TreeView treeView = TreeView( tree: treeNodes, - treeRowBuilder: (TreeViewNode node) { + treeRowBuilder: (TreeViewNode node) { if (node.depth! == 0) { return getTappableRow( - node as TreeViewNode, + node, () { log.add(node.content); tapCounter++; @@ -174,7 +174,7 @@ void main() { int exitCounter = 0; final TreeView treeView = TreeView( tree: treeNodes, - treeRowBuilder: (TreeViewNode node) { + treeRowBuilder: (TreeViewNode node) { if (node.depth! == 0) { return getMouseTrackingRow( onEnter: (_) => enterCounter++, @@ -397,7 +397,7 @@ void main() { treeView = TreeView( tree: treeNodes, - treeRowBuilder: (TreeViewNode node) { + treeRowBuilder: (TreeViewNode node) { if (node.depth! == 1) { // extent == 100 return row; @@ -766,7 +766,7 @@ void main() { controller: horizontalController, ), tree: treeNodes, - treeRowBuilder: (TreeViewNode node) { + treeRowBuilder: (TreeViewNode node) { return row.copyWith( backgroundDecoration: node.depth! == 0 ? rootBackgroundDecoration diff --git a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart index 846962b0bd62..46a50e7b4805 100644 --- a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart +++ b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart @@ -130,7 +130,7 @@ void main() { controller: controller, treeNodeBuilder: ( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { returnedController ??= TreeViewController.of(context); @@ -153,7 +153,7 @@ void main() { tree: simpleNodeSet, treeNodeBuilder: ( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { returnedController ??= TreeViewController.maybeOf(context); @@ -454,9 +454,9 @@ void main() { home: TreeView( tree: simpleNodeSet, controller: controller, - onNodeToggle: (TreeViewNode node) { + onNodeToggle: (TreeViewNode node) { toggled = true; - toggledNode = node as TreeViewNode; + toggledNode = node; }, ), )); @@ -476,13 +476,13 @@ void main() { home: TreeView( tree: simpleNodeSet, controller: controller, - onNodeToggle: (TreeViewNode node) { + onNodeToggle: (TreeViewNode node) { toggled = true; - toggledNode = node as TreeViewNode; + toggledNode = node; }, treeNodeBuilder: ( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { final Duration animationDuration = toggleAnimationStyle.duration ?? @@ -535,11 +535,11 @@ void main() { tree: simpleNodeSet, treeNodeBuilder: ( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { style ??= toggleAnimationStyle; - return Text(node.content.toString()); + return Text(node.content); }, ), )); @@ -558,11 +558,11 @@ void main() { toggleAnimationStyle: AnimationStyle.noAnimation, treeNodeBuilder: ( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { style = toggleAnimationStyle; - return Text(node.content.toString()); + return Text(node.content); }, ), )); @@ -580,11 +580,11 @@ void main() { ), treeNodeBuilder: ( BuildContext context, - TreeViewNode node, + TreeViewNode node, AnimationStyle toggleAnimationStyle, ) { style ??= toggleAnimationStyle; - return Text(node.content.toString()); + return Text(node.content); }, ), )); From 7b8b3f69feefab287a6ce30fcd3b3f55879c9c74 Mon Sep 17 00:00:00 2001 From: baumths Date: Thu, 6 Jun 2024 09:03:23 -0300 Subject: [PATCH 6/9] update test to check the type of the callbacks --- .../test/tree_view/tree_test.dart | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart index 46a50e7b4805..4d76a584fb9c 100644 --- a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart +++ b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart @@ -695,28 +695,28 @@ void main() { }); test('should use the generic type for callbacks and builders', () { - Widget createTreeView() { - return TreeView( - tree: simpleNodeSet, - treeNodeBuilder: ( - BuildContext context, - TreeViewNode node, - AnimationStyle animationStyle, - ) { - return TreeView.defaultTreeNodeBuilder( - context, - node, - animationStyle, - ); - }, - treeRowBuilder: (TreeViewNode node) { - return TreeView.defaultTreeRowBuilder(node); - }, - onNodeToggle: (TreeViewNode node) {}, - ); - } + final TreeView treeView = TreeView( + tree: simpleNodeSet, + treeNodeBuilder: ( + BuildContext context, + TreeViewNode node, + AnimationStyle animationStyle, + ) { + return TreeView.defaultTreeNodeBuilder( + context, + node, + animationStyle, + ); + }, + treeRowBuilder: (TreeViewNode node) { + return TreeView.defaultTreeRowBuilder(node); + }, + onNodeToggle: (TreeViewNode node) {}, + ); - expect(createTreeView, returnsNormally); + expect(treeView.onNodeToggle, isA>()); + expect(treeView.treeNodeBuilder, isA>()); + expect(treeView.treeRowBuilder, isA>()); }); }); From 6a53e36dad9e076e29c959b34975496cc2843710 Mon Sep 17 00:00:00 2001 From: baumths Date: Thu, 6 Jun 2024 09:37:16 -0300 Subject: [PATCH 7/9] fix analysis issue --- .../two_dimensional_scrollables/test/tree_view/tree_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart index 4d76a584fb9c..a1790879fe9a 100644 --- a/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart +++ b/packages/two_dimensional_scrollables/test/tree_view/tree_test.dart @@ -510,7 +510,7 @@ void main() { // Spacer const SizedBox(width: 8.0), // Content - Text(node.content.toString()), + Text(node.content), ]), ), ); From fa55ce83149a2d88034e229cbca81c29c7cc25df Mon Sep 17 00:00:00 2001 From: Matheus Baumgarten Date: Thu, 6 Jun 2024 17:34:02 -0300 Subject: [PATCH 8/9] Apply suggestions from code review Co-authored-by: Kate Lovett --- packages/two_dimensional_scrollables/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/two_dimensional_scrollables/pubspec.yaml b/packages/two_dimensional_scrollables/pubspec.yaml index 8f85f53d5546..45845c7afe09 100644 --- a/packages/two_dimensional_scrollables/pubspec.yaml +++ b/packages/two_dimensional_scrollables/pubspec.yaml @@ -1,6 +1,6 @@ name: two_dimensional_scrollables description: Widgets that scroll using the two dimensional scrolling foundation. -version: 0.3.0+1 +version: 0.3.1 repository: https://github.com/flutter/packages/tree/main/packages/two_dimensional_scrollables issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+two_dimensional_scrollables%22+ From d5d0a4ddfb22e1fe292a0eb00ae6cde8f1b7f70d Mon Sep 17 00:00:00 2001 From: baumths Date: Thu, 6 Jun 2024 17:34:58 -0300 Subject: [PATCH 9/9] update version in changelog --- packages/two_dimensional_scrollables/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/two_dimensional_scrollables/CHANGELOG.md b/packages/two_dimensional_scrollables/CHANGELOG.md index c793dda7192a..0bcac837523c 100644 --- a/packages/two_dimensional_scrollables/CHANGELOG.md +++ b/packages/two_dimensional_scrollables/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.3.0+1 +## 0.3.1 * Adds generics to the callbacks and builders of TreeView.