Flutter 监听页面切换

一.简介

我们经常会遇到从上一个页面回到当前页面去做刷新。但是state的生命周期实际上没有这个监听。当然我们可以通过监听上个页面的返回值,在当前页面await结果来做。但是这种方式还需要在下一个页面去写代码,不解耦。另一种方式就是监听路由。

二、监听页面切换

我们会使用到RouteAware这个类,查看源码如下:

/// An interface for objects that are aware of their current [Route].
///
/// This is used with [RouteObserver] to make a widget aware of changes to the
/// [Navigator]'s session history.
abstract class RouteAware {
  /// Called when the top route has been popped off, and the current route
  /// shows up.
  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() { }
}

举个栗子:
加入当前有三个页面,A、B、C,我们从A调到B跳到C,再从C回到B回到A。依次会对应下面几个方法回调。

  • didpush 当A打开到B的时候回调
  • didPushNext 当B打开C的时候回调
  • didPopNext 当C回到B的时候回调
  • didPop 当B关闭回到A的时候调用
三、具体使用

1.创建一个RouteObserver

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();

2.在MaterialApp中navigatorObservers属性添加routeObserver

MaterialApp(
...
navigatorObservers: [routeObserver],
...

3.在使用的State类上混入RouteAware

class AddressListPageState extends State<AddressListPage> with RouteAware{

4.在didChangeDependencies中去注册监听和在dispose中注销。注意两点,一是不要在initState中注册,会报错。二是flutter2.0之后需要强转成PageRoute。

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

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

5.实现对应的监听回调

 @override
  void didPop() {
    ///从B退回到A的是调用
    print("didPop");
    super.didPop();
  }

  @override
  void didPush() {
    ///从A进入B的时候调用
    print("didPush");

    super.didPush();
  }

  @override
  void didPopNext() {
    ///从C回到B的时候调用
    print("didPopNext");
    super.didPopNext();
  }

  @override
  void didPushNext() {
    ///从B进入C的时候调用
    print("didPushNext");
    super.didPushNext();
  }

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值