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

Flutter DropdownButton使用自定义模型时报类型不是String子类型错误如何解决

问题修复方案

错误原因

  • 类型报错直接原因:hint参数中你直接把CareAdviceOptions类型的_care对象传给了Text组件,Text要求接收字符串类型参数,类型不匹配触发报错。
  • 选中后展示值不更新原因:_care的赋值操作放在了setState回调外,状态变更没有触发组件重绘,UI不会响应状态变化。

修复步骤

仅需要修改care_advice_page.dart中的careOptions方法代码即可:

1. 修复hint类型不匹配

将原来的hint行:

hint: Text(_care ?? 'Make a selection'),

替换为:

hint: Text(_care?.dropdownText ?? 'Make a selection'),

2. 调整状态更新逻辑,删除冗余的index查询

onChanged回调中拿到的value本身就是选中的CareAdviceOptions对象,不需要再查索引取值,同时把所有状态变更放到setState中触发UI刷新:
原来的onChanged代码:

onChanged: (CareAdviceOptions value) {
  _care = value;
  var _index = snapshot.data.indexOf(value);
  _careInstruction = snapshot.data[_index].fullText;
  _careInsSetAs = snapshot.data[_index].dropdownText;
  setState(() {
    _isOptionSelected = true;
  });
},

替换为:

onChanged: (CareAdviceOptions value) {
  setState(() {
    _care = value;
    _careInstruction = value.fullText;
    _careInsSetAs = value.dropdownText;
    _isOptionSelected = true;
  });
},

3. 可选优化(避免分类切换时报错)

在第一个下拉框选中新分类_careCat的逻辑中,增加清空旧选中值的代码:

setState(() {
  _careCat = 新选中的分类值;
  _care = null; // 清空上一个分类的选中项
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:15:04