Flutter 中路由 使用 Fluro 解决Navigator
2020-07-27 本文已影响0人
mark666
目前Flutter 中路由使用第三方库最多的是 fluro,
因为看网上很多人网上推荐使用,所以有幸入坑了,官网上介绍了简单的使用方法,
使用起来也比较方便,但是不能完全满足我们的需求,例如路由机制我们常见的需求,
1.参数回调
我们查看上图中 fluro
的 pop
方法是没有返回值的,我们就需要调用原生的
Navigator.of(context).pop(参数)
- 从A->B->C->D 结束后返回A页面
这个框架竟然没有任何解决方案,我查看它的 issue
中有人提出了这个问题
我也查找了网上很多解决方案,大多数是基于原生的路由管理机制处理,
最为靠谱的是
Navigator.popUntil(context, ModalRoute.withName(路由名字));
我在开始尝试中,一执行就会报 Bad state: No element
这个错误,提醒我元素不存在,可是明明它在路由栈中啊,为了方便测试查找问题,我去掉了页面网络请求和传参,这时候我发现路由跳转竟然正常了,非常正常的返回了我想要pop 的页面,这让我很难受!
于是我恢复了代码,去打断点追踪 popUntil
执行流程
我发现了RouteSettings 中路由名字发生了变化,它已经不单纯了,所以我们popUntil
为我们最初的路由名字已经失效了,所以我们显然可以使用如下方法
Navigator.of(context).popUntil((route) => route.settings.name.startsWith(路由名字));
这样我们就实现了我们的需求。
下图是我 在 github
上做出的回答:
由于项目依赖 fluro
比较重,迁移有稍许成本,打算继续先用,后期基于fluro
开源一个比较完美的路由框架。建议新开项目的伙伴们不要使用fluro
,基于原生路由即可,做一些封装可以和比fluro
更好用!