当前位置: 首页 > 知识库问答 >
问题:

为什么toList()在Dart中创建一个列表?

孙俊彦
2023-03-14

我有这个方法,它在Dart 2中编译没有问题。但是,在运行时,我得到以下错误

输入列表

正如你在代码中看到的,我在. map()中创建并返回新的ExChangeRateE对象,然后返回一个rateEntries.toList(),我希望它是类型List

@override
Future<List<ExchangeRate>> getExchangeRatesAt(DateTime time, Currency baseCurrency) async {
  final http.Client client = http.Client();
  final String uri = "some uri ...";
  return await client
    .get(uri)
    .then((response) {
      var jsonEntries = json.decode(response.body) as Map<String, dynamic>;
      var rateJsonEntries = jsonEntries["rates"].entries.toList();
      var rateEntries = rateJsonEntries.map((x) {
        return new ExchangeRate(x.value.toDouble());
      });
      return rateEntries.toList(); // WHY IS IT RETURNING A List<dynamic> here?
    })
    .catchError((e) => print(e))
    .whenComplete(() => client.close());
}

然而,如果我把它专门投给汇率,那就好了。

    return rateEntries.toList().cast<ExchangeRate>();

最后这个铸造对我来说似乎是多余的,为什么我需要它?


共有1个答案

费明诚
2023-03-14

嗯,似乎演员阵容是完全定义类型所必需的。

但是,如果您添加以下任何片段,您可以避免强制转换:

>

  • rateJsonEntry变量正确的类型

    列表

    不管出于什么原因,这在我的情况下是有效的。

    将参数类型添加map()方法中

    var rateEntries=rateJsonEntries。地图

  •  类似资料:
    • 本文向大家介绍dart 创建一个新列表,包括了dart 创建一个新列表的使用技巧和注意事项,需要的朋友参考一下 示例 列表可以通过多种方式创建。 推荐的方法是使用List文字: 该List构造可以作为很好: 如果您喜欢更强的键入,还可以通过以下方式之一提供类型参数: 为了创建一个小的可增长列表,该列表为空或包含一些已知的初始值,首选文字形式。对于其他种类的列表,有专门的构造函数: 另请参阅关于集合

    • 本文向大家介绍dart 创建一个新映射,包括了dart 创建一个新映射的使用技巧和注意事项,需要的朋友参考一下 示例 可以通过多种方式创建映射。 使用构造函数,您可以创建一个新的映射,如下所示: 键和值的类型也可以使用泛型定义: 否则,可以使用映射文字创建映射:            

    • 我有一个数据框,其中一些单元格包含多个值的列表。我不想在一个单元格中存储多个值,而是希望扩展dataframe,以便列表中的每个项都有自己的行(在所有其他列中都有相同的值)。因此,如果我有: 如何转换为长格式,例如: 索引并不重要,可以将现有列设置为索引,而最终的顺序并不重要。

    • 本文向大家介绍dart 创建一个新的集合,包括了dart 创建一个新的集合的使用技巧和注意事项,需要的朋友参考一下 示例 可以通过构造函数创建集合:            

    • 问题内容: 我注意到eclipse最近创建了一个.settings目录,其中包含1个文件,我想知道是否应该将此添加到版本控制中?SVN? 还有,这是新的吗?我已经使用eclipse已有相当长的一段时间了,但从未注意到它。 目录中文件的内容是这样的: 这些设置是否应该在工作区范围内而不是特定于项目? 问题答案: 此文件记录项目特定的设置与工作空间首选项。 我注意到该文件通常是在将常规Java项目转换

    • 当使用Java8流时,获取一个列表、从中创建一个流、处理业务并将其转换回来是很常见的。类似于: 有什么想法吗?