You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:09:03