如何在Dart空安全代码中正确调用返回null的非空安全函数?
Dart 空安全兼容旧代码的 null 标记方案
Dart 有专门的注解解决这种跨版本空安全兼容的问题,核心是用 package:meta 里的**@nullable 注解**,具体操作如下:
- 先在
pubspec.yaml的dependencies里加meta: ^1.9.0或更高版本,执行pub get拉取依赖。 - 回到你的
// @dart=2.9旧代码文件,给getUser()加上注解:import 'package:meta/meta.dart'; @nullable User getUser() { // 原逻辑:未登录返回null,登录返回User实例 } - 现在在空安全代码里调用
getUser(),返回值会被识别为User?可空类型,user == null的判断不会再被 linter 误判为永远为 false,LoginScreen 的逻辑就能正常保留。
要是不想加额外依赖,也可以在空安全代码里强制把返回值转成可空类型:
final User? user = getUser() as User?;
这种不用改旧代码,但可读性不如注解方案,适合临时救急。
如果旧代码是公共库,优先用注解方案,能让所有调用方都正确识别可空性;要是项目内部代码,两种方案可根据情况选择。
内容的提问来源于stack exchange,提问作者Burhanuddin Rashid
相关产品推荐
相关产品推荐

