Flutter 耗时监控 | 路由名为空原因分析

科技资讯 投稿 8300 0 评论

Flutter 耗时监控 | 路由名为空原因分析

前言

    在 main.dart 页面中点击 + 按钮跳转到 TestPage2 页面。
  1. MaterialApp 中设置路由守卫并在路由守卫中打印 route 名。

main.dart

launch_observer.dart

TestPage2.dart

    应用启动进入 main 打印是正确的,之前没有页面,进入时候打印 route = /
  • 进入 TestPage2 时,previewousRoute 的 name = / 正确,但是当前 route 的 settings.name 却为 null,这就比较奇怪了。

我试着复现文章开头的例子,代码如下:

    main.dart 不变,点击 + 跳转到 TestPage2
  1. 在 TestPage2 中获取路由参数和路由名字
结果发现:name 的值仍然为 null; ## 问题分析

解决办法

能不能自动设置 RouteSettings

思路一:

有这个想法是因为涉及到老代码的迁移,很多老代码不想一个个改加 Settings,偷个懒。而且平时用的时候大部分情况下都不会带 settings 属性。

flutter - How to get the Widget Class name from the builder object in MaterialPageRoute - Stack Overflow

换个思路

群里大佬指出可以尝试换个思路: aop buildpage。这里找到个帖子是这种思路,没验证各位大大可自行辨别,哈哈。

Flutter aspectd(五)全局监控 flutter 生命周期

核心点

总结

    Route.settings.name 无法获取原因是 push/pushNamed 时 MaterialPageRoute 没设置 RouteSettings 属性。
  1. 如果老项目有埋点等需求需要监控页面名,建议老老实实给每个 MaterialPageRoute 加 RouteSettings 属性比较稳妥。
  2. 最最推荐的做法是通过 APT 方式模块化路由功能,这样应用中所有 MaterialPageRoute 生成过程就可以收拢,生成代码时将 RouteSettings 属性添加上即可。

❤️ 本文原创听蝉 公众号:码里特别有禅 欢迎关注原创技术文章第一时间推送 ❤️

参考链接

flutter - How to get the Widget Class name from the builder object in MaterialPageRoute - Stack Overflow
Flutter aspectd(五)全局监控flutter生命周期 - 掘金

编程笔记 » Flutter 耗时监控 | 路由名为空原因分析

赞同 (44) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽