@@ -553,7 +553,7 @@ class CommonSemanticsFinders {
553
553
return _PredicateSemanticsFinder (
554
554
predicate,
555
555
describeMatch,
556
- _rootFromView ( view) ,
556
+ view,
557
557
);
558
558
}
559
559
@@ -689,15 +689,6 @@ class CommonSemanticsFinders {
689
689
return pattern == target;
690
690
}
691
691
}
692
-
693
- SemanticsNode _rootFromView (FlutterView ? view) {
694
- view ?? = TestWidgetsFlutterBinding .instance.platformDispatcher.implicitView;
695
- assert (view != null , 'The given view was not available. Ensure WidgetTester.view is available or pass in a specific view using WidgetTester.viewOf.' );
696
- final RenderView renderView = TestWidgetsFlutterBinding .instance.renderViews
697
- .firstWhere ((RenderView r) => r.flutterView == view);
698
-
699
- return renderView.owner! .semanticsOwner! .rootSemanticsNode! ;
700
- }
701
692
}
702
693
703
694
/// Provides lightweight syntax for getting frequently used text range finders.
@@ -1065,16 +1056,44 @@ abstract class Finder extends FinderBase<Element> with _LegacyFinderMixin {
1065
1056
1066
1057
/// A base class for creating finders that search the semantics tree.
1067
1058
abstract class SemanticsFinder extends FinderBase <SemanticsNode > {
1068
- /// Creates a new [SemanticsFinder] that will search starting at the given
1069
- /// `root` .
1070
- SemanticsFinder (this .root );
1059
+ /// Creates a new [SemanticsFinder] that will search within the given [view] or
1060
+ /// within all views if [view] is null .
1061
+ SemanticsFinder (this .view );
1071
1062
1072
- /// The root of the semantics tree that this finder will search.
1073
- final SemanticsNode root;
1063
+ /// The [FlutterView] whose semantics tree this finder will search.
1064
+ ///
1065
+ /// If null, the finder will search within all views.
1066
+ final FlutterView ? view;
1067
+
1068
+ /// Returns the root [SemanticsNode] s of all the semantics trees that this
1069
+ /// finder will search.
1070
+ Iterable <SemanticsNode > get roots {
1071
+ if (view == null ) {
1072
+ return _allRoots;
1073
+ }
1074
+ final RenderView renderView = TestWidgetsFlutterBinding .instance.renderViews
1075
+ .firstWhere ((RenderView r) => r.flutterView == view);
1076
+ return < SemanticsNode > [
1077
+ renderView.owner! .semanticsOwner! .rootSemanticsNode!
1078
+ ];
1079
+ }
1074
1080
1075
1081
@override
1076
1082
Iterable <SemanticsNode > get allCandidates {
1077
- return collectAllSemanticsNodesFrom (root);
1083
+ return roots.expand ((SemanticsNode root) => collectAllSemanticsNodesFrom (root));
1084
+ }
1085
+
1086
+ static Iterable <SemanticsNode > get _allRoots {
1087
+ final List <SemanticsNode > roots = < SemanticsNode > [];
1088
+ void collectSemanticsRoots (PipelineOwner owner) {
1089
+ final SemanticsNode ? root = owner.semanticsOwner? .rootSemanticsNode;
1090
+ if (root != null ) {
1091
+ roots.add (root);
1092
+ }
1093
+ owner.visitChildren (collectSemanticsRoots);
1094
+ }
1095
+ collectSemanticsRoots (TestWidgetsFlutterBinding .instance.rootPipelineOwner);
1096
+ return roots;
1078
1097
}
1079
1098
}
1080
1099
@@ -1539,7 +1558,7 @@ class _ElementPredicateWidgetFinder extends MatchFinder {
1539
1558
1540
1559
class _PredicateSemanticsFinder extends SemanticsFinder
1541
1560
with MatchFinderMixin <SemanticsNode > {
1542
- _PredicateSemanticsFinder (this .predicate, DescribeMatchCallback ? describeMatch, super .root )
1561
+ _PredicateSemanticsFinder (this .predicate, DescribeMatchCallback ? describeMatch, super .view )
1543
1562
: _describeMatch = describeMatch;
1544
1563
1545
1564
final SemanticsNodePredicate predicate;
0 commit comments