Flutter给TextWidget赋值时出现'String'不是'int?'子类型错误如何修复
报错修复方案
报错原因
你遇到的type 'String' is not a subtype of type 'int?'报错,是因为userPhone变量的声明类型为int?(可空整型),但从JSON中取出的mobilePhone字段实际为字符串类型,Dart强类型校验不允许直接跨类型赋值。
修复方法
你可以根据业务需求选择以下任意一种方案:
方案1:保留
userPhone的int?类型,对取出的字符串做类型转换
优先用int.tryParse做安全转换,转换失败时自动返回null,避免抛出格式异常,同时优化JSON重复解码的冗余逻辑:setState(() { // 仅解码一次JSON,避免重复执行jsonDecode final jsonData = jsonDecode(data)[3]; userName = jsonData['name']; userEmail = jsonData['email']; String? phoneStr = jsonData['mobilePhone']; // 安全转成int,空值/非数字格式时返回null userPhone = phoneStr == null ? null : int.tryParse(phoneStr); print(data); });后续如果要在Text组件中展示手机号,调用
toString()转成字符串即可:TextWidget( text: userPhone?.toString() ?? '无手机号', size: 20, )方案2(推荐):修改
userPhone的声明类型为String?
手机号通常可能包含前置0、区号+号、分隔符等特殊格式,本身不适合用整型存储,直接修改变量类型是最稳妥的方案,无需额外转换逻辑:// 把原声明的int? userPhone; 改成下面的即可 String? userPhone;
注意:不要多次调用jsonDecode(data),重复解码会增加不必要的性能损耗,建议解码后把结果存入临时变量复用
内容的提问来源于stack exchange,提问作者doğan kısa
相关产品推荐
相关产品推荐

