0

我有一个 BLoC,只要我将其作为继承的小部件访问,就可以从屏幕内的任何小部件的任何位置访问它。但是,我想显示一个对话框并在其中使用我的模型的相同实例。当我尝试将我的模型作为继承的小部件访问时,我得到一个空错误。看起来这是由于使用新上下文的新屏幕造成的。

有没有办法让我的模型用于子屏幕/对话框而无需在构造函数中显式传递它?

4

1 回答 1

0

继承小部件的全部意义在于允许您访问它而无需通过构造函数传递它。如果你必须通过它,你可能没有按设计使用它。

继承的小部件有一些注意事项。首先是它们是不可变的;你不能改变他们的数据。第二个是没有直接的方法可以单独访问一个。

相反,您应该做的是在您的小部件树中创建一个 StatefulWidget 子类,使其在树中高于您需要它的任何地方。这意味着,如果您将它放在一个页面中,然后将新页面推送到导航器,它将无法正常工作,因为它们是导航器下小部件树中的单独分支。

查看这个答案,了解如何使用继承的小部件的更深入示例。此外,请查看scoped_model包——它消除了继承小部件所需的大量样板文件。

如果您所做的只是显示一个对话框然后返回到同一页面,那么您根本不必使用 InheritedWidget - 您可以只使用一个简单的小部件,然后再将其传回。但是,如果不向您的问题添加一些代码,就很难说出您可能出错的地方。

于 2018-08-16T22:37:13.103 回答