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

标签 flutter

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

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/

相关文章:

android - 在 com.android.build.gradle.LibraryExtension 类型的对象上找不到参数 [] 的方法 buildFeatures()

json - Dart 从 base64 转换整个 json 树

function - dart 中的 Function() 和 Function 有什么区别?

dart - 如何在 flutter dart 中使用具有多个条件的三元运算符?

dart - Flutter - 它在幕后是如何工作的?

android - Flutter 调试带有不同消息的垃圾邮件控制台

flutter - 首次启动时启动欢迎屏幕

swift - flutter 将 Objective C 项目迁移到 Swift 项目。使用swift插件时出错

firebase - flutter 和 Firebase : Send File as Image

flutter - 按字母顺序对文件进行排序