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
相关产品推荐
相关产品推荐

