Flutter使用multi_select_flutter时List<Object?>无法赋值给List<Muscle>怎么解决
错误原因
Dart中List<Object?>和List<Muscle>是完全不同的泛型类型,直接使用括号强转不符合Dart的类型安全规则,因此转换失败。
解决方案
方案1:给组件指定泛型(最优)
直接在MultiSelectChipField上声明泛型为Muscle,组件回调会直接返回对应类型的列表,无需额外转换:
MultiSelectChipField<Muscle>( // 此处指定泛型 items: _items, initialValue: _muscles, title: Text("Select Muscles"), headerColor: Colors.blue.withOpacity(0.5), decoration: BoxDecoration( border: Border.all(color: Colors.blue, width: 1.8), ), selectedChipColor: Colors.blue.withOpacity(0.5), selectedTextStyle: TextStyle(color: Colors.blue[800]), onTap: (values) { // 此时values类型自动为List<Muscle> _selectedMuscles = values; }, )
方案2:使用cast方法转换
如果不想修改组件定义,可使用List自带的cast方法完成类型转换:
onTap: (values) { _selectedMuscles = values.cast<Muscle>(); }
方案3:安全遍历过滤转换
更稳妥的写法,自动过滤非Muscle类型的元素,避免运行时类型异常:
onTap: (values) { _selectedMuscles = values.whereType<Muscle>().toList(); }
内容的提问来源于stack exchange,提问作者carlosd9
相关产品推荐
相关产品推荐

