【发布时间】:2018-10-02 17:31:18
【问题描述】:
我看到我可以像这样在build() 方法中访问 InheritedWidgets:final inheritedWidget = ChronoApp.of(context); 但是如果我想在其他地方访问它怎么办,比如在没有上下文的initState() 中。我该怎么做?
【问题讨论】:
标签: dart flutter inherited-widget
我看到我可以像这样在build() 方法中访问 InheritedWidgets:final inheritedWidget = ChronoApp.of(context); 但是如果我想在其他地方访问它怎么办,比如在没有上下文的initState() 中。我该怎么做?
【问题讨论】:
标签: dart flutter inherited-widget
根据本文档,context 应该可以在 initState 中使用 context getter。
https://docs.flutter.io/flutter/widgets/State/context.html
框架在使用 StatefulWidget.createState 创建 State 对象之后和调用 initState 之前将 State 对象与 BuildContext 相关联。
【讨论】:
didChangeDependencies() 是更好的地方,因为它在 initState() 之后调用,您将在那里获得上下文。
didChangeDependencies 可以多次调用。
我发现对我有用的是获取父上下文并在 initState 之后调用的 didChangeDependencies() 函数中使用它。像这样
@override
// TODO: implement context
BuildContext get context => super.context;
@override
void didChangeDependencies() {
bloc = LoginBlocProvider.of(context);
bloc.isAuthenticated.listen((bool value) {
setState(() {
isLoading = false;
});
if (value) {
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) => HomeScreen()
));
}
});
super.didChangeDependencies();
}
来自 de didChangeDependencies() 文档:
这个方法也会在 initState 之后立即调用。这是安全的 从此方法调用 BuildContext.inheritFromWidgetOfExactType。
我仍在尝试完全理解此功能,但这对我有用
【讨论】: