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

Flutter报Expected a value of type 'string' but got one of type 'int'如何解决

问题解决方法

报错原因

你编写的checkProportion函数三个if分支返回的是int类型的计数结果,只有最后的默认分支返回String类型的比例文本,函数整体返回类型被Dart推导为Object,而Text组件要求入参必须是String,当触发前三个条件分支时就会抛出类型不匹配的运行时错误。

修复方案

方案1:统一返回比例文本

如果你的需求是统计后输出三色计数比例,调整逻辑为条件匹配后先更新计数,最后统一返回拼接好的String类型比例即可,同时给函数显式声明返回类型String,让编译器提前做类型校验:

String checkProportion(String predominantGamete, String resultado) {
  var countBrown = 0;
  var countBlack = 0;
  var countWhite = 0;

  if (predominantGamete == 'recessiva_aa' &&
      resultado.contains('A') &&
      resultado.contains('P')) {
    countBrown += 1;
  } else if (predominantGamete == 'recessiva_aa' &&
      resultado.contains('A') &&
      resultado.contains('pp')) {
    countBlack += 1;
  } else if (predominantGamete == 'recessiva_aa' &&
      resultado.contains('aa')) {
    countWhite += 1;
  }
  return 'Proporção: ${countBrown}:${countBlack}:${countWhite}';
}

方案2:返回对应颜色文本

如果你需要匹配条件后输出对应的颜色结果而非比例,可以直接修改分支返回String类型的颜色描述:

String checkProportion(String predominantGamete, String resultado) {
  if (predominantGamete == 'recessiva_aa' &&
      resultado.contains('A') &&
      resultado.contains('P')) {
    return '棕色';
  } else if (predominantGamete == 'recessiva_aa' &&
      resultado.contains('A') &&
      resultado.contains('pp')) {
    return '黑色';
  } else if (predominantGamete == 'recessiva_aa' &&
      resultado.contains('aa')) {
    return '白色';
  }
  return 'Proporção: 0:0:0';
}

颜色对应参考

各结果对应颜色展示

注意事项

  • Dart开发中建议所有函数都显式声明返回值类型,避免隐式类型推导带来的运行时类型错误,编译器会在编码阶段就校验返回值类型是否符合要求。
  • 确保函数所有分支的返回值类型和声明的返回类型一致即可彻底解决该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:45:01