我遇到了麻烦但无法解决。我有这个代码
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => yourFunction(context));
}
我得到了
The method 'addPostFrameCallback' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!').
为什么以及如何解决这个问题?
答案 0 :(得分:1)
WidgetsBinding.instance
并不总是被初始化。 runApp
会为您执行此操作,因此您只需担心它不会被初始化,如果您在 runApp
之外执行某些操作,而您没有在此处执行此操作。
在相对最近的 null-safety 迁移中,他们使 WidgetsBinding.instance
可以为空,因为它可能不会被初始化,从它类型末尾的 ?
可以明显看出。
解决方案在您的错误消息中。使用 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));
}