Flutter 在Navigator.push之后,上下文丢失

Flutter 在Navigator.push之后,上下文丢失,flutter,provider,navigator,Flutter,Provider,Navigator,但在Navigator.push之后,它在聊天屏幕中不可用: Navigator.push(context, MaterialPageRoute(builder: (c) => ChatScreen())); 为什么语境被打破了?如何维护原始上下文? 我目前的临时解决方案是在导航器之前从提供程序获取isSpecialist,并将其作为参数发送到聊天屏幕,但我需要找到更好的解决方案。提供程序应该放在小部件树的顶部,在MaterialApp的上方。上下文没有丢失,只是使用了错误的上下文。 假

但在Navigator.push之后,它在聊天屏幕中不可用:

Navigator.push(context, MaterialPageRoute(builder: (c) => ChatScreen()));
为什么语境被打破了?如何维护原始上下文?
我目前的临时解决方案是在导航器之前从提供程序获取isSpecialist,并将其作为参数发送到聊天屏幕,但我需要找到更好的解决方案。

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

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

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


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

你确定你在这两者上面都提供了
IsSpecialist
吗?你能在这里发布代码吗?我已经通过将materialapp包装到multiprovider中修复了我的小部件层次结构,现在整个应用程序都可以使用提供者值。谢谢如果这对你有帮助,那么请投票并接受答案,这样我就可以得到一些信任。
Navigator.push(context, MaterialPageRoute(builder: (c) => ChatScreen()));
Provider.of<IsSpecialist>(context).value
Could not find the correct Provider above this Widget