【发布时间】:2020-01-17 23:25:18
【问题描述】:
Provider 包使用InheritedWidget。当我想在对话框中访问提供者时,这是一个问题。如果我使用
showDialog(... builder: (context) => MyDialog);
我无法使用InheritedWidget 访问任何内容,因为我的对话框不是主窗口小部件树的一部分。这也意味着我无法访问我的 Provider 提供商,对吗?
我的问题是:如果我的提供程序不是主应用小部件树的一部分,我如何在对话框中访问它?
final firebaseAuth = Provider.of<FirebaseAuth>(context);
我在使用BLoCs 时遇到了同样的问题。如果我尝试通过InheritedWidget 在对话框中检索它们,它们会失败。我已经通过在构造函数中传递BLoC 来解决这个问题,但这似乎违背了InheritedWidgets 的目的。
【问题讨论】:
-
不是解决方案,而是一个建议:使用 BLoC 模式,使用依赖注入将 BLoC 注入组件是很常见的。在这种情况下,您不依赖小部件树来接收实例。我个人建议 DI 使用
getIt。 -
我已经尝试过了,我喜欢它。但我已经看到 Provider 包几乎可以满足您的所有需求。唯一的问题是整个小部件树。我希望有一种巧妙的方式在我的应用程序中使用“Provider”,而不必求助于 getIt。但我同意,这绝对是一个解决方案。
标签: flutter flutter-provider inherited-widget