Flutter Dart中API JSON足球分数匹配显示错误求助
足球比分展示匹配错误的修复方案
问题根源
你直接用scores![i].score!.goals.toString()按固定索引取分数,没考虑API返回的scores数组元素是和主/客队绑定的——部分赛事的数组顺序或结构可能存在差异,直接按索引取就会导致比分和球队对应错位。
具体修复步骤
1. 明确JSON中分数的归属标识
先梳理你拿到的嵌套JSON结构,找到每个分数对应的球队区分字段:
- 常见标识:
isHome(布尔值,true对应主队)、teamId(与赛事中的主队/客队ID一一对应)、side(值为home/away)
举个典型的API返回结构示例:
{ "match": { "home_team": {"id": 101, "name": "曼城"}, "away_team": {"id": 102, "name": "阿森纳"}, "scores": [ {"team_id": 101, "score": {"goals": 2}}, {"team_id": 102, "score": {"goals": 1}} ] } }
2. 按球队归属匹配分数,抛弃固定索引
若用
teamId匹配:// 获取当前赛事的主、客队ID final homeTeamId = currentMatch.homeTeam.id; final awayTeamId = currentMatch.awayTeam.id; // 从scores数组中精准匹配对应球队的分数 final homeScore = scores.firstWhere((item) => item.teamId == homeTeamId).score!.goals.toString(); final awayScore = scores.firstWhere((item) => item.teamId == awayTeamId).score!.goals.toString();若用
isHome字段区分:final homeScore = scores.firstWhere((item) => item.isHome == true).score!.goals.toString(); final awayScore = scores.firstWhere((item) => item.isHome == false).score!.goals.toString();
3. 增加容错处理,避免崩溃
万一数组为空或找不到匹配项,通过兜底逻辑防止应用崩溃:
// 用firstWhere的orElse参数设置默认值,返回0分 final homeScore = scores.firstWhere( (item) => item.isHome == true, orElse: () => ScoreItem(score: Score(goals: 0)) ).score!.goals.toString();
验证小技巧
- 打印错误赛事和正常赛事的
scores数组完整结构,对比两者的顺序、字段差异 - 先针对某一场错误赛事做测试,确认比分与球队对应正确后再全局替换逻辑
内容的提问来源于stack exchange,提问作者neuryzonso
相关产品推荐
相关产品推荐

