Closed JunbinDeng closed 3 years ago
在当前页面,需要取出前个页面的路由名和参数,记录打开时的状态,用于当前页面的数据上报
你这个方式有点费劲。。。
非要这样,push的时候自己前个页面自己传过来也行
非要这样,push的时候自己前个页面自己传过来也行
最早是这么考虑的,但是每个页面都这样传参,似乎不够合理,这是本可以从架构层面解决的问题。
在 Android 获取栈中 Activity 和 Fragment 对象参数都可以获取。
在调用 allRoutes 的时候,返回的是 RouteSettings 类型。原以为返回的路由和参数都有值,结果只有路由有值,从接口设计的层面来说,这个结果完全不符合预期。如果返回的是 String 类型,只返回路由似乎还好理解一些。
如果同时把路由和参数返回不会对整体架构设计产生负面影响,建议大佬还是可以考虑把路由和参数都返回。
我比较好奇的是,你这个埋点本身只是要记录页面栈,为什么不能在原生端做呢。
那个参数你可能拿不到你想要的,主要是代码层面的问题,除了 url index 可以保证,params 被认为是一次性的参数传递,传到页面之后就不保证还能在 intent 里面拿到。可能被复用或者被清掉了。现在要加的话,需要将之前代码重新 review 一遍,成本还是比较大的。
我还是建议你全局埋点,thrio 本来就是在原生端有全量的页面栈信息,下个页面打开之前,可以将其串到当前页面并埋点,这种方式不会有任何问题。
我比较好奇的是,你这个埋点本身只是要记录页面栈,为什么不能在原生端做呢,那个参数你可能拿不到你想要的,看时机吧
不只是记录页面栈,还需要根据一些特殊页面调整上报参数。你的意思是原生部分能取出历史路由和参数吗,这样的话原生实现可能需要做双端逻辑。
我加了返回参数后,在 Flutter 侧可以拿到。如果时机较早,可以使用 Future.microtask 延迟获取。
要加的话,我需要在 iOS 和 Android 上都加,加的方式可能是在 原生端的 RouteSetting 或者 PageRoute 里面保留一份未反序列化的 params 原始值以供回传,那个已经反序列化过的想要再回传就比较麻烦了,可能并没有对应的序列化器。
框架层面对序列化器的管理在两端是有做匹配的,比如在 Flutter 端存在 序列化器,在 Android 端存在反序列化器,这样就可以保证 Flutter 到 Android 传递的 json 是可以正常进行的,这时候 params 在原生端经过了反序列化,但不存在 序列化器,所以无法再回传给 Flutter。
此功能可能无法实现了,如上面所说,Flutter --> Android 的时候 params 是可以传递的,反过来 Android --> Flutter 确实也可以将 未反序列化的 params 传递回来,但此时 Flutter 侧不存在对应的 反序列化器 去解析 这个 params,所以逻辑上走不通。
框架本身的实现肯定最小功能子集,业务逻辑层面不需要的功能尽量不会多余的去实现,你这个需求本身是埋点范畴的特殊需求,你可以考虑子集实现。
就是不想返回参数,你需要在什么场景使用,且这个参数本来应该是一次性的,不该残留