Flutter/Dart报错:类'Object'未定义'<'运算符如何解决
报错产生原因
该报错由两类问题共同触发:
- 代码存在语法书写错误:判断表达式中
snapshot.data !<10属于非法写法,非空断言运算符!应当紧跟在可空对象之后、比较运算符之前,错误的运算符拼接直接导致Dart语法分析器无法正确推导snapshot.data的实际类型,将其识别为顶层类型Object。 Object是Dart所有类型的根类,本身没有定义<数值比较运算符,直接对Object类型对象调用<运算符就会抛出对应错误。- 额外隐患:如果使用
FutureBuilder/StreamBuilder时未指定对应泛型,snapshot.data的默认类型为Object?,就算修正了运算符位置,不做类型处理也会触发同类类型不匹配错误。
正确修复方式
- 给
FutureBuilder/StreamBuilder补充匹配的泛型声明,如果你的快照数据是整数类型,就声明为FutureBuilder<int>/StreamBuilder<int>,让类型系统可以正确推导snapshot.data的类型为int?。 - 修正判断表达式的语法,将非空断言放在正确位置,明确非空判断后再做数值比较。
修复后的可正常运行代码如下:
title: Text( (snapshot.hasData && snapshot.data! < 10) ? "${snapshot.data}" : 'Demo', )
注意:如果
snapshot.data存储的是字符串格式的数字,需要先做类型转换再做比较,例如将取值部分写为int.parse(snapshot.data!) < 10,避免出现类型不匹配问题。
内容的提问来源于stack exchange,提问作者Adeeb Fekri
相关产品推荐
相关产品推荐

