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

Flutter中遇FormatException:无效基数10数字错误求助

问题排查与解决

1. 修复Uri构造错误

你的代码里Uri.http()用法完全错误:

  • Uri.http()第一个参数是主机名(不能带https://前缀),第二个参数是接口路径;
  • 且Uri.http()默认使用http协议,但你的接口是https协议,应该用Uri.https()或直接Uri.parse()。

错误代码:

var url = Uri.http('https://woocommerce-811161-3604078.cloudwaysapps.com/wp-json/api/v1/get-home-page');

修正后二选一:

// 方法1:用Uri.https()拆分主机与路径
var url = Uri.https('woocommerce-811161-3604078.cloudwaysapps.com', '/wp-json/api/v1/get-home-page');

// 方法2:直接用Uri.parse()传入完整链接
var url = Uri.parse('https://woocommerce-811161-3604078.cloudwaysapps.com/wp-json/api/v1/get-home-page');

这个错误会导致请求返回非JSON内容(比如400/404错误页面的HTML),jsonDecode()解析时会因内容不符合预期抛出异常。

2. 增加请求状态校验

在解析JSON前,先判断响应状态码是否正常,避免无效内容解析:

final response = await http.get(url);
if (response.statusCode != 200) {
  throw Exception('请求失败,状态码:${response.statusCode}');
}
// 再执行后续解析逻辑

3. 检查banner.fromJson中的类型转换

如果前两步修复后仍报错,大概率是banner类的fromJson方法中,存在将非数字字符串强制转为int的操作(比如用int.parse()处理了接口返回的非数字字段)。

比如接口返回字段为"null"、"abc"或空字符串时,int.parse(json['id'])会直接触发FormatException: Invalid radix-10 number。

解决方式:

  • 先判断字段有效性再转换:
// 示例:处理id字段
int? id;
if (json['id'] is int) {
  id = json['id'];
} else if (json['id'] is String) {
  id = int.tryParse(json['id']);
}
// 或设置默认值
id = int.tryParse(json['id']?.toString() ?? '') ?? 0;
  • 用int.tryParse()替代int.parse(),避免直接抛出异常。

4. 确认接口返回格式

打印response.body后,确认返回的是标准JSON数组。如果返回的是JSON对象(外层是{}而非[]),List<dynamic> data = jsonDecode(...)会直接报错,需调整解析逻辑。


内容的提问来源于stack exchange,提问作者Jaini Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:53:15