检测 Kraken 是否在屏

使用 RouteObserver 自动切换

此方法仅适用于使用 Flutter 所提供的跳转能力,

当一个 App 从一个 Kraken 页面跳转到另外一个页面时,必然希望原有 Kraken 页面所执行的动画等操作将不再执行,以节省 App 宝贵的计算资源。

Flutter 提供了 RouteObserver 来实现对此的监听。同样这个功能在 Kraken 上也适用,只需要在生成 Kraken 的时候,传入 routeObserver 参数即可。

  1. // Register the RouteObserver as a navigation observer.
  2. final RouteObserver<ModalRoute<void>> routeObserver = RouteObserver<ModalRoute<void>>();
  3. void main() {
  4. runApp(MaterialApp(
  5. home: MyApp(),
  6. navigatorObservers: [routeObserver],
  7. ));
  8. }
  9. class MyApp extends StatelessWidget {
  10. const MyApp({Key? key}) : super(key: key);
  11. @override
  12. Widget build(BuildContext context) {
  13. return Scaffold(
  14. appBar: AppBar(
  15. title: Text('Second Route'),
  16. ),
  17. body: Center(
  18. child: Column(children: [
  19. Kraken(
  20. routeObserver: routeObserver
  21. ),
  22. ])
  23. ),
  24. );
  25. }
  26. }

当页面跳转,Kraken 被隐藏的时候,setTimeout,setInterval,requestAnimationFrame 的回调将停止执行,只有当页面再次返回的时候,回调才会再次被触发。

手动进行暂停

如果跳转行为时通过客户端视图进行跳转,这时 Kraken 将无法监听页面是否发生跳转。所以开发者需要自行实现路由监听函数,并调用以下方法来实现页面的暂停和唤起。

暂停页面的执行

  1. Kraken kraken = Kraken();
  2. // All timers and requestAnimationFrame will pause
  3. kraken.controller.pause();

恢复页面的执行

  1. Kraken kraken = Kraken();
  2. // All timers and requestAnimationFrame will resume
  3. kraken.controller.resume();