尽管存在空检查,但 Dart 空安全性会抱怨函数变为空

San*_*jay 4 dart flutter

所以我有一个以下类,它onPressed作为一个可以为空的道具:

class Class1 {
  final Function? onPressed;
  
  const Class1({ this.onPressed });
  
  callMethod() {
    if(onPressed != null) {
      onPressed(); // Complains here
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我检查了是否onPressed为空。但是 dart 仍然抱怨这条消息The function can't be unconditionally invoked because it can be 'null'. (view docs) Try adding a null check ('!').请帮助我。

Pav*_*tov 6

尝试按照编译器的建议添加空检查 ('!')

class Class1 {
  final Function? onPressed;

  const Class1({this.onPressed});

  callMethod() {
    if (onPressed != null) {
      onPressed!(); //Note: ! is added here
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,我们在运行时进行“if (onPressed != null)”检查,因此这里不可能出现“Null check”异常 (2认同)