Flutter使用multi_select_flutter组件出现类型赋值错误如何解决?
问题原因
multi_select_flutter组件未显式指定泛型时,回调默认返回List<Object?>类型,和你声明的List<Animal?>变量类型不匹配,因此触发赋值报错,同时因为返回值被推导为Object类型,无法直接访问Animal类的自定义字段。
解决方案
给组件显式添加Animal泛型约束即可,修改后的完整组件代码如下:
Container( width: 0.9.sw, height: 150.0.h, decoration: const BoxDecoration( color: Colors.white24, borderRadius: BorderRadius.all( Radius.circular(10), ), ), // 为选择器组件添加泛型约束<Animal> child: MultiSelectBottomSheetField<Animal>( initialChildSize: 0.4, listType: MultiSelectListType.CHIP, searchable: true, buttonText: const Text("Favorite Animals"), title: const Text("Animals"), items: _items, onConfirm: (List<Animal?> values) { setState(() { // 现在values类型和_selectedAnimals2完全匹配,可直接赋值 _selectedAnimals2 = values; }); }, // 为芯片展示组件也添加泛型约束<Animal> chipDisplay: MultiSelectChipDisplay<Animal>( onTap: (Animal? value) { setState(() { _selectedAnimals2.remove(value); }); }, ), ), ),
修改完成后即可直接访问Animal实例的字段,示例如下:
// 遍历所有选中的动物,打印ID和名称 for (var animal in _selectedAnimals2) { debugPrint("选中动物ID:${animal?.id},名称:${animal?.name}"); }
如果业务逻辑可保证选中项永远非空,可将_selectedAnimals2的类型修改为List<Animal>,赋值时做类型转换即可:
_selectedAnimals2 = values.cast<Animal>();
内容的提问来源于stack exchange,提问作者Muhammad Haad Bin Zahid
相关产品推荐
相关产品推荐

