我有一个BLoC,只要我作为继承的小部件访问它,便可以从屏幕上的任何小部件访问任何地方的BLoC。但是,我想显示一个对话框并在其中使用模型的相同实例。当我尝试以继承的小部件访问模型时,出现空错误。看来这是由于使用了新上下文的新屏幕所致。
是否有一种方法允许我的模型用于子屏幕/对话框而不在构造函数中显式传递它?
答案 0 :(得分:0)
继承的小部件的全部要点是允许您访问它,而不必将其传递给构造函数。如果必须通过它,则可能未按设计使用。
继承的小部件需要牢记一些注意事项。首先是它们是不可变的。您无法更改其数据。第二个是没有直接方法可以直接访问一个。
您应该做的是在小部件树中创建一个StatefulWidget子类,以使其在树中比您需要的任何地方都高。这意味着,如果您将其放在一个页面中,然后将新页面推送到导航器,它将无法正常工作,因为它们是导航器下小部件树中的单独分支。
请查看this answer,以获取有关如何使用继承的小部件的更深入的示例。另外,请查看scoped_model软件包-它消除了继承的小部件所需的许多样板。
如果您所要做的只是显示一个对话框,然后返回到同一页面,则根本不必使用InheritedWidget-您可以只使用一个简单的小部件,然后将其传递回去。但是,如果不向问题中添加任何代码,很难判断出哪里出了问题。