【问题标题】:Context is lost after Navigator.pushNavigator.push 后上下文丢失
【发布时间】:2020-04-06 15:13:44
【问题描述】:
Provider.of<IsSpecialist>(context).value

可在此 Navigator.push 上方访问:

Navigator.push(context, MaterialPageRoute(builder: (c) => ChatScreen()));

但在 Navigator.push 之后,它在 ChatScreen 中不可用:

Provider.of<IsSpecialist>(context).value

返回

Could not find the correct Provider above this Widget

为什么上下文被破坏了?如何保持原有的语境? 我目前的临时解决方案是在 Navigator 之前从 Provider 获取 isSpecialist 并将其作为参数发送到 ChatScreen,但我需要找到更好的解决方案。

【问题讨论】:

  • 你确定你在上面提供了IsSpecialist吗?
  • 你能把代码贴在这里吗?

标签: flutter provider navigator


【解决方案1】:

上下文并没有丢失,您只是使用了错误的上下文。 假设A -&gt; B -&gt; C 是小部件层次结构。

我认为您将IsSpecialist 推送到B 并在C 中访问它,但您使用的是A 的上下文。

如果您可以发布更多代码来了解您的小部件层次结构,那就更清楚了。

【讨论】:

  • 我已经通过将 materialapp 包装到 multiprovider 中修复了我的小部件层次结构,现在提供程序值可在整个应用程序中使用。谢谢!
  • 如果对您有帮助,请投票并接受答案,以便我获得一些荣誉。
【解决方案2】:

Provider 应该放在小部件树的顶部,在 MaterialApp 上方

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多