Флаттер, отображающий json в массив модели 'List <dynamic>', не является подтипом типа 'Map«` - PullRequest
0 голосов
/ 10 марта 2019

Я читаю JSON с несколькими разными массивами.Поэтому я хочу сопоставить его с индивидуальным списком моделей.Таким образом, сначала я создал список, например, как показано ниже.

class Summary {


  final String totalDuration;
  final String totalMileage;
  //final String fleetID;

  Summary({this.totalDuration, this.totalMileage});

  Map<String, dynamic> toJson() => {
        'totalDuration': totalDuration,
        'totalMileage': totalMileage,

      };

  factory Summary.fromJson(Map<String, dynamic> json) {
    return new Summary(
      totalDuration: json['totalDuration'],
      totalMileage: json['totalMileage'],

    );
  }
}

Мне удалось вызвать мой API, и ниже показано, как мои результаты в формате json выглядят не полными, поскольку я хотел сделать его кратким.

"totalSummary": 6,
    "Summary": [
        {
            "totalDuration": "2549",            
            "totalMileage": "22.898"
        },
        { 
            "totalDuration": "11775",
            "totalMileage": "196.102"
        },
        {
            "totalDuration": "17107",
            "totalMileage": "232.100"
        },
        {  
            "totalDuration": "34870",
            "totalMileage": "177.100"
        },
        {
            "totalDuration": "33391",
             "totalMileage": "168.102"
        },
        {
            "totalDuration": "13886",
            "totalMileage": "77.398"
        }
    ],
    "totalDetails": 16,
    "details": [
          ..........
        ]

Ниже я написал, как заполнить сводный массив.

final fullJson = await NetworkUtils.post(url,token,data);
        print("fullJson"+fullJson.toString());
        try{
        Summary summary1 = new Summary.fromJson(fullJson['Summary']);

         print(summary1.totalMileage);
        }
        catch(Err){
          print("Erro is at"+Err.toString());
        }

В итоге я получаю type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'

1 Ответ

1 голос
/ 11 марта 2019

Это потому, что возвращаемый ответ содержит список карты вместо карты.

измени свою линию Summary summary1 = new Summary.fromJson(fullJson['Summary']);

до Summary summary1 = new Summary.fromJson(fullJson['Summary'][i]);

где я могу принимать любое значение от 0 до количества объектов в Сводке минус один.

Чтобы получить полный список Summary объектов, сделайте следующее:

int totalSummaryCount = fullJson['totalSummary'];
List<Summary> list = new List<Summary>.generate(totalSummaryCount, (index)=>Summary.fromJson(fullJson['Summary'][index]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...