002.2 监听flutter页面路由事件【入门级】

参考

  • https://api.flutter.dev/flutter/widgets/RouteObserver-class.html
  • https://medium.com/@najeira/how-to-handle-screen-transitions-in-flutter-b39dcb2675f
  • https://medium.com/flutter-community/how-to-track-screen-transitions-in-flutter-with-routeobserver-733984a90dea

概述

  • 屏幕切换(screen transitions)或者说路由变化(push/pop)时,Flutter ‘s Widgets本身并没有回调函数会调用,因为像MaterialApp这么大量级的widget也仅仅是一个widget而已,它本身是不具备知晓路由变化的能力的。在纯flutter应用中(混合式中也可以),Navigator来管理页面路由,你可以给Navigator传递a list of NavigatorObserver来接收页面路由事件。你可以自己实现NavigatorObserver,或者说更方便一点,直接使用RouteObserver.

怎么用(入门教程)

  • 在main函数上面定义一个这个东西:
// global RouteObserver
// 这里定义了一个routeObserver
// 但PageRoute是个什么东西?
// 怎么访问routeObserver?为什么在_ListPageState中可以直接访问到routeObserver?
//     |_好像这里定义了,在任何一个地方都可以访问routeObserver,好像它是一个全局变量似的,甚至比全局变量还牛逼的一个东西routeObserver
final RouteObserver routeObserver = new RouteObserver();

void main() => runApp(MyApp());
  • 把routeObserver这个东西传递给MaterialApp的navigatorObservers(其实最终给到了Navigator,MaterialApp widget只是包裹了Navigator):


    image.png
  • 最后进入到自己的widget中,添加如下代码:


    image.png

注意

  • 在纯flutter应用中,这样使用应该没啥问题
  • 在native和纯flutter混合应用中,应为页面堆栈管理的复杂性、混乱性不一定那么好使,但在flutter切flutter页面时还是好使的,flutter切native就不一定好使了,因为跳转的时候,用的不是Navigator api,Navigator怎么给你发送通知啊?NavigatorObserver怎么收到通知啊?这样想想也对,结合native堆栈管理,应该就可以搞定这个事情了。

你可能感兴趣的:(002.2 监听flutter页面路由事件【入门级】)