2020-05-12 21:27:31
Flutter 跳转到新页面 上一个页面的context 各页面的共同父Widget
发现问题
有2个页面[A]和[B],关系是从[A]跳到[B],需要共享购物车数据。
- 创建了一个
Provider
来共享数据,让[A]页面作为它的child
。 - [A]中用
Navigator.push
跳到[B], 在[B]中用Provider.of(context)
获取共享的数据。
问题出现,我并不能得到 Provider
共享的数据。
分析
因为[B]的 parent
中没有 Provider
。
要使用 Provider
,[A]和[B]的 parent
中都有那个 Provider
才行。
但是跳转页面这种情况,怎么才能做到呢。
看了官方样例中的代码,是把 Provider
放到 MaterialApp
上层。
但是并没有看出来[B]页面和 MaterialApp
有什么关系呀。
我想到了 Theme.of(context)
的用法。
这个方法在哪里都是直接用,也没见 Theme
是哪里创建的。
在 Theme
的官方文档中有这么一句。
MaterialApp, which includes an AnimatedTheme widget configured via the MaterialApp.theme argument.
结合 InheritedWidget
的知识, Theme
应该是 MaterialApp
的 parent
。
看了源码,好像我猜的没错。
解决
回到跳转页面,谁是共同 parent
的问题。
由于跳转页面都要用到 Navigator
,
那么 Navigator
就有可能是所有页面的 parent
。
然后 Navigator
是 MaterialApp
的 parent
。
所以让 Provider
作为 MaterialApp
的 parent
,
也就成为了所有页面的 parent
。
问题解决。
起初我还想到了把[A]页面的context传到[B]页面。好像也没成功。
网友评论