Flutter 中如何像iOS 那样拥有viewWillApear 之类的生命周期方法。

442 阅读1分钟

在Flutter 中有一个路由监听的机制,使用路由监听 并实现 RouteAware 虚拟类就可以获得. 可以让我们的 页面拥有以下方法的监听

void didPopNext() {
  // 从上一个路由页面返回 到当前页面
}

/// Called when the current route has been pushed.
void didPush() { 
  //进入当前页面
}

/// Called when the current route has been popped off.
void didPop() {
   //退出当前页面
 }

/// Called when a new route has been pushed, and the current route is no
/// longer visible.
void didPushNext() {
  // 进入一个新的页面
}

如何监听路由?

MaterialApp(
……
navigatorObservers : 
……
);

List<NavigatorObserver>? navigatorObservers;

navigatorObservers 是一个数组,表示可以多个监听。

我们可以继承 RouteObserver 类并实现响应的方法

class RouteChangeObserver<R extends Route<dynamic>> extends RouteObserver<R> {
  @override
  void didPush(Route route, Route? previousRoute) {
    super.didPush(route, previousRoute);
  }
  @override
  void didPop(Route route, Route? previousRoute) {
    super.didPop(route, previousRoute);
  }
  @override
  void didReplace({Route? newRoute, Route? oldRoute}) {
    super.didReplace(newRoute: newRoute,oldRoute: oldRoute);
  }

  @override
  void didRemove(Route route, Route? previousRoute) {
    super.didRemove(route, previousRoute);
  }
  @override
  void didStartUserGesture(Route route, Route? previousRoute) {
    super.didStartUserGesture(route, previousRoute);
  }
  @override
  void didStopUserGesture() {
    super.didStopUserGesture();
  }
}

最后,按照以下方式填写即可。

MaterialApp(
……
navigatorObservers : [RouteChangeObserver<PageRoute>()],
……
);