ОШИБКА: тип 'String' не является подтипом типа 'int' индекса 'при использовании fromjson во флаттере - PullRequest
0 голосов
/ 04 ноября 2019

Я учусь TDD (разработка тест-драйва) в трепетании. Здесь я пытаюсь проанализировать свои данные JSON, но каждый раз, когда я запускаю тест, я получаю сообщение об ошибке:

ОШИБКА: тип 'String' не является подтипом типа 'int' of 'index'

Это мой код

weather_app_model_test.dart

  group('fromJson', () {
    test('should return a valid model', () async {
      final Map<String, dynamic> jsonMap =
          json.decode(fixture('weather_app.json'));
      final result = WeatherAppModel.fromJson(jsonMap);
      expect(result, tWeatherAppModel);
    });
  });

weather_app_model.dart

factory WeatherAppModel.fromJson(Map<String, dynamic> json) {
    return WeatherAppModel(
      weatherMain: json['weather']['main'],
      weatherDescription: json['weather']['description'],
      temp: json['main']['temp'],
      minTemp: json['main']['temp_min'],
      maxTemp: json['main']['temp_main'],
      country: json['sys']['country'],
    );
  }

fixtures / weather_app.json

{
  "coord": {
    "lon": 78,
    "lat": 20
  },
  "weather": [
    {
      "id": 500,
      "main": "Rain",
      "description": "light rain",
      "icon": "10d"
    }
  ],
  "base": "model",
  "main": {
    "temp": 301.51,
    "pressure": 1014,
    "humidity": 67,
    "temp_min": 301.51,
    "temp_max": 301.51,
    "sea_level": 1014,
    "grnd_level": 979
  },
  "wind": {
    "speed": 3.19,
    "deg": 77
  },
  "rain": {
    "3h": 1.81
  },
  "clouds": {
    "all": 45
  },
  "dt": 1572672029,
  "sys": {
    "country": "IN",
    "sunrise": 1572655775,
    "sunset": 1572696807
  },
  "timezone": 19800,
  "id": 1272596,
  "name": "Digras",
  "cod": 200
}

Любая помощь будет отличной.

1 Ответ

1 голос
/ 04 ноября 2019
factory WeatherAppModel.fromJson(Map<String, dynamic> json) {
    return WeatherAppModel(
      weatherMain: json['weather'][0]['main'],
      weatherDescription: json['weather'][0]['description'],
      temp: json['main']['temp'],
      minTemp: json['main']['temp_min'],
      maxTemp: json['main']['temp_main'],
      country: json['sys']['country'],
    );
  }

Это исправит вашу проблему. json['weather'] не возвращается как карта, это массив. Он принимает первое значение с [0].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...