【问题标题】:_TypeError type Listdynamic is not a subtype of type List<double>_TypeError 类型 Listdynamic 不是 List<double> 类型的子类型
【发布时间】:2020-12-22 06:04:45
【问题描述】:

自从我开始使用 dart 已经一周了,我正在尝试绘制接受 List double 作为输入数据的图表。 我从 api 获取数据并将获取的数组放入我声明的列表中。 列出 aqis; //列表声明 aqis = mapResponse['aqi_predictions']; //存储api值

我收到了这个错误

convert List<dynamic> is not a subtype of type List<double>

any possible way to convert this list<dynamic> to list<double>

【问题讨论】:

  • 我已经尝试过了,但同样的错误仍然存​​在 doubleList = aqis.map((s) => s as double).toList();

标签: flutter dart


【解决方案1】:

我们开始吧!

此解决方案适用于列表中更复杂的动态值,例如 [1.1, '3', 3, '4.4'] 到 double List

void main() {
  List<dynamic> d = [1.1, '3', 3, '4.4'];
  print('Dynamic list: ' + d.toString());
  List<double> dList = [];
  for(var v in d){
    String s = v.toString();
    dList.add(double.parse(s));
  }
  print('Double list: ' + dList.toString());
}

输出:

Dynamic list: [1.1, 3, 3, 4.4]
Double list: [1.1, 3, 3, 4.4]

【讨论】:

    【解决方案2】:

    假设你有

    List<dynamic> dynamicList = [1.0,2.0,3.0];
    

    如果您尝试将其分配给 double,它将是:

    List<double> castedList = dynamicList.cast<double>();
    

    或者

    List<double> castedList = dynamicList.map((element)=>element).cast<double>().toList();
    

    对于必须从字符串中解析双精度的不纯列表:

     List<double> castedList = dynamicList.map((element)=>double.parse(element.toString())).toList();
    

    【讨论】:

    • 如果列表像[1, 2.2, '3.3'] 这样更复杂,您的List&lt;double&gt; castedList = dynamicList.cast&lt;double&gt;(); 方法将不起作用
    • 现在是最后一个。
    • 但是您必须在答案中指定对吗?
    【解决方案3】:

    您可以将动态的list 转换为double,方法是迭代所有元素并将typecasting 加倍。

    以下代码对我来说很好用,

        List<dynamic> x = [2.2, 3.4, 5, 10.2];
        List<double> y = [];
        x.forEach((element) {
          y.add(element.toDouble());
        });
    

    如果输入列表是动态的,例如 [1.1, '3', 3, 4] 具有不同的类型,则使用:

        List<dynamic> x = [2.2, 3.4, "5", 10.2];
        List<double> y = [];
      x.forEach((element) {
          y.add(double.parse(element.toString()));
        });
    

    【讨论】:

    • 这不是像[1.1, '3', 3, 4]这样的动态列表的正确答案
    • 如果要将字符串转换为双精度,则必须解析元素,对于这种列表,请使用此 sn-p x.forEach((element) { y.add(double.parse( element.toString())); });
    • 是的,我知道。这就是为什么我在评论中这么说的原因。
    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 2023-01-22
    • 2020-02-01
    • 1970-01-01
    • 2021-09-12
    • 2021-02-25
    • 2020-06-21
    • 2019-08-18
    相关资源
    最近更新 更多