如何在Flutter中将List<dynamic>转换为List<Object>

10

我已经创建了两个列表 List <Animal> _animals 和 List <Animal> _selectedanimals

static List<Animal> _animals = [
    Animal( name: "Tiger"),
    Animal(name: "Lion"),
    Animal( name: "Panda"),
    Animal( name: "Anaconda"),];

  List<Animal> _selectedAnimals2 = [];

我创建了一个多选表格,用户可以选择他喜欢的动物。当用户点击确认或者选择后,被选中的值会被存储在名为“values”的动态列表中,然后从List<dynamic>类型的“values”列表中存储到另一个List<Animal>类型的“_selectedAnimals2”列表中。但是,我遇到了下面所述的错误:

类型“List<dynamic>”不是类型“List<Animal>”的子类型

MultiSelectBottomSheetField(
                         initialChildSize: 0.4,
                         listType: MultiSelectListType.CHIP,
                         searchable: true,
                         buttonText: Text("Favorite Animals",style: GoogleFonts.montserrat(color: Colors.white),),
                         title: Text("Animals"),
                         items: _items,
                         onConfirm: (values) {
                            _selectedAnimals2=values;
                            final List<String> choose=_selectedAnimals2.map((Animal animal) => animal.name).toList();
                           saveUserInfoToFireStore(choose);
                         },
3个回答

22

如果我们想将动态列表转换为其类型,可以使用方法cast()

List sample = ["test1", "test2"]; /// dynamic list

List<String> stringList = []; /// string list

/// for casting
stringList = sample.cast<String>();

同样地,我们可以转换我们的列表。

List<CustomModel> list = dynamicList.cast<CustomModel>();

1
这个好使 <3,谢谢兄弟,你刚刚救了我一命,让我赶在截止日期之前完成任务 :D - Nghien Nghien

0
List<CustomModel> toResponseList(List<dynamic> data) {
    List<CustomModel> value = <CustomModel>[];
    data.forEach((element) {
      value.add(NasaResponseModel.fromJson(element));
    });
    return value ?? List<CustomModel>.empty();
  }

对我来说可行 :)


0
如果您的_items是字符串列表,您可以尝试这个:
_selectedAnimals2 = values.map((val) => Animal( name: val)).toList()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接