如何让DropdownMenuItem支持任意类型?Flutter类型不匹配问题求助
问题原因
服务端返回的values列表元素类型不固定(有时是int,有时是String),原代码强制指定map的参数为String,导致int类型元素无法匹配,抛出类型转换错误。
解决方案
统一所有下拉选项的value类型为String,不管原数据是int还是String,都先转为String类型,确保类型一致。
修改后的完整代码
List fieldName = [ { 'name': 'Alex', 'values': [1, 2, 3, 4], }, { 'name': 'jack', 'values': ['jack', 'samer'], } ]; ListView.builder( itemCount: fieldName.length, itemBuilder: (BuildContext context, int index) { return DropdownButtonFormField<String>( onChanged: (String? selectedValue) {}, items: fieldName[index]['values'] .map<DropdownMenuItem<String>>((dynamic value) { final String displayValue = value.toString(); return DropdownMenuItem( value: displayValue, child: Text(displayValue), ); }).toList(), ); }, );
关键修改点
- 给
DropdownButtonFormField指定泛型<String>,明确下拉选项的value类型为String - map遍历用
dynamic接收原数据,兼容int和String类型 - 通过
toString()将所有元素转为String,赋值给DropdownMenuItem的value和Text组件 - 修正原代码中字符串未加引号、键值对缺少冒号的语法错误
内容的提问来源于stack exchange,提问作者Mohammed Hamdan
相关产品推荐
相关产品推荐

