извлекать данные с помощью флаттера Приемник: нулевая ошибка - PullRequest
0 голосов
/ 15 октября 2019

я пытаюсь получить api json, вот ссылка https://api.myjson.com/bins/ut9kq, когда я печатаю вывод перед циклом, он получает данные, но после списка выдает ошибку

"Необработанное исключение: NoSuchMethodError: Получатель 'image' был вызван по нулю. E / flutter (30730): Приемник: ноль E / flutter (30730): пробный вызов: image "

вот мой код

    List lists;

    Future<List> getLists() async {
      lists = new List();
      await api.httpGet('bins/ut9kq').then((reponse) {
        var data = jsonDecode(reponse.body);
        print(data); // i get the json data => [{},{}..]
        data.forEach((l) {
          lists.add(ArticleModal().fromJson(l));
        });
        // print(lists[0].image);//Receiver: null
      });
      return lists;
    }

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Вы используете оба подхода для будущей обработки, затем обратные вызовы, асинхронность и ожидание. Попробуйте следующее, вы можете обернуть их вокруг блоков try / catch для обработки ошибок.

Future<List<ArticleModal>> getLists() async {
  lists = new List();

  var response = await http.get('bins/ut9kq');

  // a switch may be used for a wider range of codes
  if (response.statusCode == 200) {
    var decodedResponse = json.decode(response.body);
    print(decodedResponse);
    //if response is a collection
    var listAricleModal = (decodedResponse as List).map((collectionElement) => ArticleModal.fromJson(collectionElement)).toList();
    return listAricleModal;
  }
  //Your future is an empty collection
  return [];
}

И, чтобы правильно ответить на ваш вопрос, image вызывается при нулевом, это вполне очевидное сообщение. В какой-то момент у вас есть поле image, этот объект не создается. Вероятно, это объект в списке, поэтому могут происходить две вещи:

  • Список пуст, поэтому не нужно вызывать изображение.
  • При вызове fromJson возникает проблема.

В любом случае, используйте отладчик и установите точки останова в первой строке каждого метода, чтобы четко понимать, что происходит. Если функция карты сложна в отладке, используйте простой цикл for, пока не узнаете, где находится ошибка.

Ознакомьтесь с этой серией видео от Google. https://youtu.be/vl_AaCgudcY

Также официальные документы: https://dart.dev/codelabs/async-await

0 голосов
/ 15 октября 2019

Ну, спасибо, ребята, что помогли, похоже, я просто забыл добавить return в методе "fromJson"

ArticleModal fromJson(Map<String, dynamic> json) {
    "should be return here " ArticleModal(
        title: json['title'],
        image: json['image'],
        date: json['date'],
        author: json['author'],
        body: json['body'],
        imageAuthor: json['imageAuthor']);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...