@@ -788,4 +788,99 @@ void main() {
788
788
expect (find.text ('Child 2:1' ), findsNothing);
789
789
expect (find.text ('Root 3' ), findsOneWidget);
790
790
});
791
+
792
+ testWidgets ('TreeSliverNode should close all children when collapsed when animation is disabled' , (WidgetTester tester) async {
793
+ // Regression test for https://github.com/flutter/flutter/issues/153889
794
+ final TreeSliverController controller = TreeSliverController ();
795
+ final List <TreeSliverNode <String >> tree = < TreeSliverNode <String >> [
796
+ TreeSliverNode <String >('First' ),
797
+ TreeSliverNode <String >(
798
+ 'Second' ,
799
+ children: < TreeSliverNode <String >> [
800
+ TreeSliverNode <String >(
801
+ 'alpha' ,
802
+ children: < TreeSliverNode <String >> [
803
+ TreeSliverNode <String >('uno' ),
804
+ TreeSliverNode <String >('dos' ),
805
+ TreeSliverNode <String >('tres' ),
806
+ ],
807
+ ),
808
+ TreeSliverNode <String >('beta' ),
809
+ TreeSliverNode <String >('kappa' ),
810
+ ],
811
+ ),
812
+ TreeSliverNode <String >(
813
+ 'Third' ,
814
+ expanded: true ,
815
+ children: < TreeSliverNode <String >> [
816
+ TreeSliverNode <String >('gamma' ),
817
+ TreeSliverNode <String >('delta' ),
818
+ TreeSliverNode <String >('epsilon' ),
819
+ ],
820
+ ),
821
+ TreeSliverNode <String >('Fourth' ),
822
+ ];
823
+
824
+ await tester.pumpWidget (MaterialApp (
825
+ home: CustomScrollView (
826
+ slivers: < Widget > [
827
+ TreeSliver <String >(
828
+ tree: tree,
829
+ controller: controller,
830
+ toggleAnimationStyle: AnimationStyle .noAnimation,
831
+ treeNodeBuilder: (
832
+ BuildContext context,
833
+ TreeSliverNode <Object ?> node,
834
+ AnimationStyle animationStyle,
835
+ ) {
836
+ final Widget child = GestureDetector (
837
+ behavior: HitTestBehavior .translucent,
838
+ onTap: () => controller.toggleNode (node),
839
+ child: TreeSliver .defaultTreeNodeBuilder (
840
+ context,
841
+ node,
842
+ animationStyle,
843
+ ),
844
+ );
845
+
846
+ return child;
847
+ },
848
+ ),
849
+ ],
850
+ ),
851
+ ));
852
+
853
+ expect (find.text ('First' ), findsOneWidget);
854
+ expect (find.text ('Second' ), findsOneWidget);
855
+ expect (find.text ('Third' ), findsOneWidget);
856
+ expect (find.text ('Fourth' ), findsOneWidget);
857
+ expect (find.text ('alpha' ), findsNothing);
858
+ expect (find.text ('beta' ), findsNothing);
859
+ expect (find.text ('kappa' ), findsNothing);
860
+ expect (find.text ('gamma' ), findsOneWidget);
861
+ expect (find.text ('delta' ), findsOneWidget);
862
+ expect (find.text ('epsilon' ), findsOneWidget);
863
+ expect (find.text ('uno' ), findsNothing);
864
+ expect (find.text ('dos' ), findsNothing);
865
+ expect (find.text ('tres' ), findsNothing);
866
+
867
+ await tester.tap (find.text ('Second' ));
868
+ await tester.pumpAndSettle ();
869
+
870
+ expect (find.text ('alpha' ), findsOneWidget);
871
+
872
+ await tester.tap (find.text ('alpha' ));
873
+ await tester.pumpAndSettle ();
874
+
875
+ expect (find.text ('uno' ), findsOneWidget);
876
+ expect (find.text ('dos' ), findsOneWidget);
877
+ expect (find.text ('tres' ), findsOneWidget);
878
+
879
+ await tester.tap (find.text ('alpha' ));
880
+ await tester.pumpAndSettle ();
881
+
882
+ expect (find.text ('uno' ), findsNothing);
883
+ expect (find.text ('dos' ), findsNothing);
884
+ expect (find.text ('tres' ), findsNothing);
885
+ });
791
886
}
0 commit comments