如何检查Widget是否已安装在Flutter中

wwwo4jvm  于 2023-01-09  发布在  Flutter
关注(0)|答案(5)|浏览(184)

因此,在我的应用中,我希望在小部件挂载后立即发出 AJAX 请求,而不是在initState()中。

j0pj023g

j0pj023g1#

如果Widget没有mounted,则返回。在setState方法之前执行此操作

if (!mounted) return;
setState(() {});

if (mounted) {
   //Do something
};
setState(() {});
ljo96ir5

ljo96ir52#

如果您想在小部件加载后立即执行某些代码,您可以简单地将这些代码放入initstate中,如下所示;

void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) => yourFunction(context));   
 }

通过这种方式,yourFunction将在小工具的第一帧加载到屏幕上时立即执行。

7nbnzgx9

7nbnzgx93#

我觉得现在不太可能。
下面是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
jk9hmnmh

jk9hmnmh4#

简单地按照以下步骤操作。

if (this.mounted) {
        setState(() {
         //Your code
        });
}
4si2a6ki

4si2a6ki5#

我知道这个答案来得有点晚,但是...
在你的方法中,你应该有这样的东西:

if(mounted){
   setState(() {});
 }

这将有助于仅在发生变化时重建UI。我自己在一个方法中使用了这一点,在该方法中,我用来自firestore的用户填充了我的列表。
在生成之前尝试调用setState时,mounted属性有助于避免错误。

相关问题