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

Flutter调用API遇String无toDouble方法错误,求解决

解决方案

问题根源是API返回的hacim字段为空字符串时,直接调用.toDouble()会报错——空字符串不是有效的数字格式,String类本身没有toDouble()方法(仅数字格式的字符串可通过double.parse转换)。以下是几种可行的修复方式:

1. 转换时添加空值与解析失败判断,返回默认值

如果业务逻辑允许将空值或无效值转为默认值(比如0.0),可以在fromJson方法中修改转换逻辑:

// 模型类fromJson方法中对应字段的处理
hacim: () {
  final dynamic value = json['hacim'];
  if (value is String) {
    // 空字符串直接返回默认值,非空字符串尝试解析,失败也返回默认值
    return value.isEmpty ? 0.0 : double.tryParse(value) ?? 0.0;
  }
  // 若返回的是num类型(如int/double),直接转double
  return (value as num?)?.toDouble() ?? 0.0;
}(),

double.tryParse和double.parse的核心区别是:前者解析失败时返回null,不会抛出异常,更适合处理不可靠的API返回数据。

2. 将模型字段改为可空类型(推荐,若业务允许空值)

如果hacim字段本身允许为空,可以把模型中的类型改为double?,这样空字符串或无效值可转为null,由业务层后续处理:

// 模型类定义
class HisseSenedi {
  final double? hacim;
  // 其他字段...

  HisseSenedi({this.hacim, /* 其他参数 */});

  factory HisseSenedi.fromJson(Map<String, dynamic> json) {
    return HisseSenedi(
      hacim: () {
        final dynamic value = json['hacim'];
        if (value is String) {
          return value.isEmpty ? null : double.tryParse(value);
        }
        return (value as num?)?.toDouble();
      }(),
      // 其他字段解析...
    );
  }
}

3. 封装通用转换工具函数(复用性更高)

如果多个API都有类似的字符串转数字需求,可以封装一个工具函数:

double? stringToDouble(dynamic value) {
  if (value is String) {
    return value.isEmpty ? null : double.tryParse(value);
  } else if (value is num) {
    return value.toDouble();
  }
  return null;
}

然后在fromJson中直接调用:

hacim: stringToDouble(json['hacim']),

你之前调用其他API无问题,是因为那些接口没有需要从字符串转换为double的字段,不会触发这个解析异常。

内容的提问来源于stack exchange,提问作者Mıktad Tahir Durak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:39:24