美文网首页Flutter学习分享-齐绪东
Flutter 基础 各页面的共同parent

Flutter 基础 各页面的共同parent

作者: 外星间谍 | 来源:发表于2020-05-17 15:11 被阅读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]页面。好像也没成功。

    相关文章

      网友评论

        本文标题:Flutter 基础 各页面的共同parent

        本文链接:https://www.haomeiwen.com/subject/dbksohtx.html