findRootAncestorStateOfType<T extends State<StatefulWidget>> method Null safety

  1. @override
T? findRootAncestorStateOfType<T extends State<StatefulWidget>>()
override

Returns the State object of the furthest ancestor StatefulWidget widget that is an instance of the given type T.

Functions the same way as findAncestorStateOfType but keeps visiting subsequent ancestors until there are none of the type instance of T remaining. Then returns the last one found.

This operation is O(N) as well though N is the entire widget tree rather than a subtree.

Implementation

@override
T? findRootAncestorStateOfType<T extends State<StatefulWidget>>() {
  assert(_debugCheckStateIsActiveForAncestorLookup());
  Element? ancestor = _parent;
  StatefulElement? statefulAncestor;
  while (ancestor != null) {
    if (ancestor is StatefulElement && ancestor.state is T)
      statefulAncestor = ancestor;
    ancestor = ancestor._parent;
  }
  return statefulAncestor?.state as T?;
}