我遇到了麻烦,但无法解决。我有这个代码
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/