RouteObserver<R extends Route> class

A Navigator observer that notifies RouteAwares of changes to the state of their Route.

RouteObserver informs subscribers whenever a route of type R is pushed on top of their own route of type R or popped from it. This is for example useful to keep track of page transitions, e.g. a RouteObserver<PageRoute> will inform subscribed RouteAwares whenever the user navigates away from the current page route to another page route.

To be informed about route changes of any type, consider instantiating a RouteObserver<Route>.

Type arguments

When using more aggressive lints, in particular lints such as always_specify_types, the Dart analyzer will require that certain types be given with their type arguments. Since the Route class and its subclasses have a type argument, this includes the arguments passed to this class. Consider using dynamic to specify the entire class of routes rather than only specific subtypes. For example, to watch for all PageRoute variants, the RouteObserver<PageRoute<dynamic>> type may be used.

To make a StatefulWidget aware of its current Route state, implement RouteAware in its State and subscribe it to a RouteObserver:
// Register the RouteObserver as a navigation observer.
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
void main() {
  runApp(MaterialApp(
    home: Container(),
    navigatorObservers: [routeObserver],
  ));
}

class RouteAwareWidget extends StatefulWidget {
  State<RouteAwareWidget> createState() => RouteAwareWidgetState();
}

// Implement RouteAware in a widget's state and subscribe it to the RouteObserver.
class RouteAwareWidgetState extends State<RouteAwareWidget> with RouteAware {

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void dispose() {
    routeObserver.unsubscribe(this);
    super.dispose();
  }

  @override
  void didPush() {
    // Route was pushed onto navigator and is now topmost route.
  }

  @override
  void didPopNext() {
    // Covering route was popped off the navigator.
  }

  @override
  Widget build(BuildContext context) => Container();

}

Inheritance

Constructors

RouteObserver()

Properties

hashCode int
The hash code for this object. [...]
read-only, inherited
The navigator that the observer is observing, if any.
read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited

Methods

didPop(Route route, Route previousRoute) → void
The Navigator popped route. [...]
override
didPush(Route route, Route previousRoute) → void
The Navigator pushed route. [...]
override
subscribe(RouteAware routeAware, R route) → void
Subscribe routeAware to be informed about changes to route. [...]
unsubscribe(RouteAware routeAware) → void
Unsubscribe routeAware. [...]
didRemove(Route route, Route previousRoute) → void
The Navigator removed route. [...]
inherited
didReplace({Route newRoute, Route oldRoute }) → void
The Navigator replaced oldRoute with newRoute.
inherited
didStartUserGesture(Route route, Route previousRoute) → void
The Navigator's route route is being moved by a user gesture. [...]
inherited
didStopUserGesture() → void
User gesture is no longer controlling the Navigator. [...]
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
toString() String
Returns a string representation of this object.
inherited

Operators

operator ==(dynamic other) bool
The equality operator. [...]
inherited