Dart调用yearText抛出'String'非'int'子类型错误求助
问题分析与解决
你的FilterOption类定义语法本身没有问题,报错的根源不在类内部,而是调用yearText的代码错误地将它当作int类型来处理。
具体原因
错误提示'String' is not a subtype of type 'int' of 'function result'意味着:你在某个地方把返回String?的yearText(不管是getter还是方法)当成了int类型来使用。比如可能写了类似这样的代码:
FilterOption option = FilterOption(); int wrongValue = option.yearText; // 试图把String?赋值给int变量,直接触发类型错误
或者将yearText传递给了需要int类型参数的方法,Dart无法将String?隐式转换为int,因此抛出错误。
你测试的修改为什么会有不同结果
- 返回
"${0} ~"能运行:只是返回的字符串内容改变,但类型依然是String?,如果调用方还是错误地当作int,理论上仍会报错——可能你测试时调用代码刚好调整了,或者巧合没触发类型检查。 - 将
year改为String能运行:这种情况下,你的调用代码原本可能期望的是String类型(比如原本想取year但误写成yearText),当year变成String后,yearText返回的String?刚好匹配调用方的类型预期,所以不再报错。 - 改成
String? yearText()方法仍报错:因为方法返回类型还是String?,调用方依然在把它当作int使用,所以错误不变。
解决方法
检查所有调用yearText的代码,确保:
- 不要将
yearText赋值给int类型的变量 - 不要将
yearText作为参数传递给需要int类型的方法 - 调用时明确它的类型是
String?,比如:
FilterOption option = FilterOption(); String? correctValue = option.yearText; // 正确用法 print(correctValue);
内容的提问来源于stack exchange,提问作者CTU
相关产品推荐
相关产品推荐

