Вы используете оба подхода для будущей обработки, затем обратные вызовы, асинхронность и ожидание. Попробуйте следующее, вы можете обернуть их вокруг блоков 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