我正在使用InheritedWidget将bloc类公开给子组件。但是,每次重新创建小部件树时,都会实例化bloc类的新实例。当我使用BehaviourSubject类存储某些文本字段的最新值时,每次娱乐都会失去当前值。这怎么解决,即bloc类只能实例化一次。
答案 0 :(得分:1)
如果它是StatefulWidget的扩展,并带有InheritedWidget,则取决于提供商的方式。
如果仅从InheritedWigdet扩展,则您将错过dispose方法,因为它不是从StatefulBuilder扩展而来,但是再也不会实例化,并且dispose方法将在您关闭应用程序时使用。检查此示例:
class Provider extends InheritedWidget {
Provider({Key key, Widget child}) : super(key: key, child: child);
final AppBloc bloc = AppBloc();
static AppBloc of(BuildContext context) =>
(context.inheritFromWidgetOfExactType(Provider) as Provider).bloc;
@override
bool updateShouldNotify(Provider oldWidget) => true;
}
此AppBloc是包含我所有应用程序块的组件。
但是,如果您的提供者使用InheritedWidget扩展了StatefulWidget,则可以在所需的类中将bloc作为构造函数参数传递,并且该类也应该是有状态的,因此您可以传递initState并将其重建仅当您再次访问它时。
答案 1 :(得分:0)
如果您使用的是StatefulWidget,则可以在initState方法中实例化块。