因此,在我的应用程序中,我想在挂载小部件后立即发出Ajax请求,而不是在initState()
中发出请求。与反应
ComponentWillMount()
类似
答案 0 :(得分:2)
我认为目前不可能。
这里是mounted
属性:https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/widgets/framework.dart#L974
bool get mounted => _element != null;
这是设置_element
的时间:https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/widgets/framework.dart#L3816
_state._element = this
我在此代码上看不到任何钩子会通知我们。
为什么仍然不使用initState
?这可能是您想要的。这是mounted
属性上方的评论:https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/widgets/framework.dart#L967
/// After creating a [State] object and before calling [initState], the
/// framework "mounts" the [State] object by associating it with a
/// [BuildContext]. The [State] object remains mounted until the framework
答案 1 :(得分:1)
onPressed: () {
if (mounted) {
print("mounted");
setState(
() => counter(),
);
} else {
print("unmounted");
}
},
事实:仅应在检查setState()
后实施“if(mounted)”
方法,这有助于避免在dispose()之后调用setState()
之类的错误。
答案 2 :(得分:0)
如果小部件还没有mounted,则返回。在setState方法之前做
if (!mounted) return;
setState(() {});
或
if (mounted) {
//Do something
};
setState(() {});
答案 3 :(得分:0)
只需执行以下操作即可。
if (this.mounted) {
setState(() {
//Your code
});
}
答案 4 :(得分:-1)
如果您想在小部件加载后立即执行一些代码,您可以简单地将此代码放入 initstate
中,如下所示;
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => yourFunction(context));
}
这样,yourFunction
会在小部件的第一帧加载到屏幕上时立即执行。