gpt4 book ai didi

flutter - addPostFrameCallback 不能无条件调用,因为在 Flutter 中 receiver 可以是 'null'

转载 作者:行者123 更新时间:2023-12-05 08:21:58 24 4
gpt4 key购买 nike

我遇到了麻烦,但无法解决。我有这个代码

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

我得到了

无法无条件调用方法“addPostFrameCallback”,因为接收者可以为“null”。尝试使调用有条件(使用“?”)或向目标添加空检查(“!”)。

为什么以及我该如何解决?

最佳答案

WidgetsBinding.instance并不总是初始化。 runApp 会为您做这件事,所以如果您在 runApp 之外做一些事情,您只需要担心它不会被初始化,而您在这里没有这样做。

在最近迁移到 null-safety他们使 WidgetsBinding.instance 可以为 null,因为它可能不会被初始化,从它类型末尾的 ? 可以明显看出。

解决方案在您的错误消息中。使用 bang 运算符 ! 或条件调用运算符 ?.。前者会告诉编译器您知道 WidgetsBinding.instance 在被使用时不会是null 并且如果您错了则抛出异常.如果后者为 null,则后者将不执行任何操作。

我建议使用前者,即 ! 运算符,因为预计 WidgetsBinding.instance 在您使用它时永远不会为 null在这里,它可能有助于找到错误。


例子:

Bang 运算符 !:

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

条件调用 ?.:

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

关于flutter - addPostFrameCallback 不能无条件调用,因为在 Flutter 中 receiver 可以是 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68086896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com