Flutter 基础 各页面的共同parent

本文探讨了在Flutter应用中,如何通过Provider管理器实现在不同页面间共享数据,尤其是在从A页面跳转到B页面时,确保B页面能够访问到A页面的上下文和共享的购物车数据。

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]页面。好像也没成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值