Flutter Dart报错'<操作符无法无条件调用,接收方可为null',加!无法解决
Flutter 空安全
<运算符调用报错解决方案 报错原因
这是Dart空安全机制的正常校验,你虽然通过snapShot.hasData做了非空判断,但Dart的类型提升对Snapshot的泛型data getter不生效,判空后data仍会被识别为可空类型,因此直接调用<运算符会触发报错。
你的代码存在的问题
- 第一行代码中
data!非空断言的位置逻辑正确,但后续字符串插值时的snapShot.data没有加非空断言,且多余使用了??''空合并符,已经断言非空的情况下不需要再做空兼容处理 - 第二行代码中将非空断言加在
snapShot!上完全错误,snapShot本身是FutureBuilder回调的入参,不存在空值风险,需要判空的是它的data属性
正确实现方式
方式1:直接修正原写法
仅需要把非空断言加在所有调用data的位置即可:
(snapShot.hasData && snapShot.data! < 10) ? '${snapShot.data!}' : 'Future in Flutter'
方式2:更安全的写法(推荐)
用局部变量接收data值后再判空,Dart对局部变量支持自动类型提升,判空后不需要再加非空断言,代码更简洁也避免了强制解包的崩溃风险:
// 此处int替换为你实际的data泛型类型 final int? data = snapShot.data; return (data != null && data < 10) ? '$data' : 'Future in Flutter';
内容的提问来源于stack exchange,提问作者Mohammad alqannas
相关产品推荐
相关产品推荐

