Navigator.push后上下文丢失

时间:2019-12-13 07:27:27

标签: flutter provider navigator

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

为什么上下文中断了?如何保持原始语境? 我当前的临时解决方案是在导航器之前从Provider获取isSpecialist并将其作为参数发送到ChatScreen,但是我需要找到一个更好的解决方案。

2 个答案:

答案 0 :(得分:1)

上下文并不会丢失,您使用的是错误的上下文。 假设A -> B -> C是小部件层次结构。

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

如果您可以发布更多代码以了解小部件层次结构,这将更加清楚。

答案 1 :(得分:0)

提供程序应放置在小部件树的顶部,即MaterialApp上方