You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:09:01