Flutter从其他页面返回到当前页面时的监听

参考文章:
Flutter监听路由返回

方法一:
push方法.then,支持手势返回✅,可以获取传回参数✅。

方法二:
didPopNext,支持手势返回✅,但回传参数获取不到❌。

方法三、
deactivate(),不支持手势返回❌,回传参数获取不到❌。

各个使用方法:
方法一、push后.then即可

方法二、添加route监听
1、程序入口添加:

// 用于路由返回监听
  static final RouteObserver routeObserver = RouteObserver();

2、MaterialApp下添加

return MaterialApp(
        navigatorObservers: [MyApp.routeObserver],

3、所在页面添加with RouteAware
4、添加订阅和移除订阅

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // 添加监听订阅
    MyApp.routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void dispose() {
    // 移除监听订阅
    MyApp.routeObserver.unsubscribe(this);
    super.dispose();
  }

4、使用一下方法来监听

  @override
  void didPush() {
    super.didPush();
    // push进入当前页面时走这里
    LogUtils.d('生命周期监听', 'didPush');
  }

  @override
  void didPushNext() {
    super.didPushNext();
    // 当前页面push到其他页面走这里
    LogUtils.d('生命周期监听', 'didPushNext');
  }

  @override
  void didPop() {
    super.didPop();
    // pop出当前页面时走这里
    LogUtils.d('生命周期监听', 'didPop');
  }

  @override
  void didPopNext() {
    super.didPopNext();
    // 从其他页面pop回当前页面走这里
    LogUtils.d('生命周期监听', 'didPopNext');
  }

方法三、

@override
  void deactivate() {
    bool isBack = ModalRoute.of(context).isCurrent;
    if (isBack) {
      // 限于从其他页面返回到当前页面时执行,首次进入当前页面不执行
      // 注:此方法在iOS手势返回时,不执行此处
      logPrint('从其他页面返回到${widget.runtimeType}页');
    } else {
      // 离开当前页面或退出当前页面时执行
      logPrint('离开或退出${widget.runtimeType}页');
    }
    super.deactivate();
  }

你可能感兴趣的:(Flutter从其他页面返回到当前页面时的监听)