_TypeError тип Listdynamic не является подтипом типа List

#flutter #dart

#flutter #dart

Вопрос:

Прошла неделя с тех пор, как я начал с 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>
 

Комментарии:

1. я пробовал это, но сохраняется та же ошибка doubleList = aqis.map((s) => s как double). ToList();

Ответ №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();
 

Для нечистого списка, где вам нужно разобрать double из строки:

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

Комментарии:

1. Ваш List<double> castedList = dynamicList.cast<double>(); метод не сработает, если список будет более сложным, например [1, 2.2, '3.3']

2. Теперь последний делает.

3. Но вы должны указать в своем ответе правильно?

Ответ №3:

Вы можете преобразовать list из dynamic в double , повторив все элементы и typecasting их в double .

Этот следующий код отлично работал для меня,

     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.1, '3', 3, 4]

2. если вы хотите преобразовать строку в double, вам нужно проанализировать элементы, для такого списка используйте этот фрагмент x.forEach((элемент) { y.add(double.parse(элемент. toString())); });

3. да, я знаю. вот почему я сказал это в комментарии для пояснения.