Flutter 开发技巧flutter

Flutter 中路由 使用 Fluro 解决Navigator

2020-07-27  本文已影响0人  mark666

目前Flutter 中路由使用第三方库最多的是 fluro,
因为看网上很多人网上推荐使用,所以有幸入坑了,官网上介绍了简单的使用方法,
使用起来也比较方便,但是不能完全满足我们的需求,例如路由机制我们常见的需求,

fluro暴露方法极少

1.参数回调

我们查看上图中 fluropop 方法是没有返回值的,我们就需要调用原生的

Navigator.of(context).pop(参数)
  1. 从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更好用!

上一篇下一篇

猜你喜欢

热点阅读