Flutter学习分享-齐绪东

Flutter 基础 各页面的共同parent

2020-05-17  本文已影响0人  外星间谍

2020‎-0‎5‎-12‎ ‏‎21:27:31
Flutter 跳转到新页面 上一个页面的context 各页面的共同父Widget

发现问题

有2个页面[A]和[B],关系是从[A]跳到[B],需要共享购物车数据。

  1. 创建了一个 Provider 来共享数据,让[A]页面作为它的 child
  2. [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 应该是 MaterialAppparent
看了源码,好像我猜的没错。


解决

回到跳转页面,谁是共同 parent 的问题。
由于跳转页面都要用到 Navigator
那么 Navigator 就有可能是所有页面的 parent
然后 NavigatorMaterialAppparent
所以让 Provider 作为 MaterialAppparent
也就成为了所有页面的 parent
问题解决。

起初我还想到了把[A]页面的context传到[B]页面。好像也没成功。

上一篇下一篇

猜你喜欢

热点阅读