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

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

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

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

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

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

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

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

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();
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容