Flutter中DropdownButton选中项不显示、_val未定义及类型不匹配问题
问题原因
- 你声明的
_val类型和DropdownButton要求的泛型类型不匹配:你指定了DropdownButton<Partner>,所以它的value参数必须是Partner?可空类型,不能用String类型。 - 最初的未定义错误是因为没有在State类中提前声明对应变量。
解决步骤
- 替换
_MultipleTestBookingState类中的_val变量声明,修改为对应类型:
// 删掉原来的 String _val = ''; 替换为下面的声明 Partner? _val;
- 保留你已经添加的
DropdownButton中的value: _val配置即可,你现有onChanged里的赋值逻辑已经符合要求,不需要额外修改。
可选优化
如果要避免Future刷新后选中值丢失、或者出现值不匹配的报错,可以在FutureBuilder的逻辑中增加一层校验:
if (snapshot.hasData) { // 新增校验:_val不为空时,校验是否在返回的Partner列表中,不存在则清空_val避免异常 if (_val != null && !snapshot.data.any((e) => e.encPartnerId == _val!.encPartnerId)) { _val = null; } return DropdownButton<Partner>( value: _val, hint: Text("Select Lab"), // 原map逻辑已指定类型,不需要额外cast,可以删掉cast调用 items: snapshot.data.map((Partner data) => DropdownMenuItem<Partner>( child: Text("${data.partnerName}"), value: data, )).toList(), onChanged: (value){ setState(() { _val=value; encLabId = value!.encPartnerId; GetTestByLab(); }); }); }
内容的提问来源于stack exchange,提问作者Toujo
相关产品推荐
相关产品推荐

