Flutter使用StreamProvider<User>报错无法在App Widget上层找到对应Provider
问题根因
- 核心错误是
main函数中重复调用了runApp方法
Flutter全局仅允许调用一次runApp,你第一次调用runApp(FirebaseWrapper())启动的是包含Provider层级的组件树,但紧接着调用的runApp(App())会直接把全局根组件替换为完全独立、没有任何Provider包裹的App实例,这个独立的App上下文自然找不到上层的User类型Provider。
修复方案
直接删除main函数中第二行runApp(App())即可,修正后的main函数代码如下:
void main() { WidgetsFlutterBinding.ensureInitialized(); runApp(FirebaseWrapper()); }
你原来的组件层级设计是没问题的:FirebaseWrapper初始化完成后返回FirebaseAuthWrapper,后者用StreamProvider包裹了App作为子组件,修正main函数后App的上下文就能正常获取到上层的Provider了。
可选优化(非必须)
如果想要更符合Provider的最佳实践,也可以把App组件中直接读取Provider的逻辑改为用builder参数或者Consumer包裹,避免上下文混淆,但本次报错不需要修改这部分也能正常运行。
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

