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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:33:17