Я пытаюсь отобразить данные из firestore, используя URL-адрес изображения. я использую FutureBuilder для получения значения URL-адреса моего изображения из firestore. но у меня проблема, потому что мое изображение не может отображаться и показывать красный экран. я получил сообщения в моей консоли отладки, например:
Another exception was thrown: A build function returned null.
I/flutter (13506): Another exception was thrown: NoSuchMethodError: The method '[]' was called on null.
I/flutter (13506): Another exception was thrown: NoSuchMethodError: Class 'QuerySnapshot' has no instance method '[]'
и это мой код:
ListTile(
leading: new FutureBuilder(
future: Firestore.instance.collection('users').where('uid', isEqualTo: _post['imgurl']).getDocuments(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if (snapshot.hasData){
if (snapshot.data != null){
print(snapshot.data['imgurl']);
return CircleAvatar(
backgroundImage: NetworkImage(snapshot.data['imgurl']),
);
}
}
},
),
title: Text('Richard');
)
ты можешь сказать мне, где моя вина?

Ваш Future возвращает список документов, а не один. Вы пытаетесь получить imageUrl документа из списка document, а не из одного.
Ваш snapshot.data — это список документов, вы можете найти их в snapshot.data.documents.
Если вас интересует только один документ, я предлагаю вам изменить Future на что-то, что возвращает только один документ (например, получение первого).
Если вы хотите сохранить свой Future как есть, просто получите первый документ из своего snapshot.data и поработайте над ним.
На данный момент я не могу предоставить дополнительные примеры, так как я не могу сделать это логически (я не дома), но могу предоставить вам некоторые, если мои предложения не помогут вам решить!
да спасибо! Я пробовал это ... но почему всегда показывать такое сообщение: Было выбрано еще одно исключение: функция сборки вернула значение null. Было выдано другое исключение: NoSuchMethodError: метод '[]' был вызван при нулевом значении.
Использовать
Image.network(widget.snapshot.data['imgurl'])
Вот как я справился с проблемой:
Card(
margin: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 6.0),
elevation: 8.0,
child:
Image.network(
widget.ds.data['GraphImg'],
fit: BoxFit.contain,
), )
работал на меня!
FadeInImage.assetNetwork(
width: 50.0,
height: 50.0,
fit: BoxFit.cover,
image:ContentThumbnail.thumbnails[index],
placeholder: 'images/placeholder.jpg',),),
FadeInImage лучше всего подходит для загрузки сетевого изображения из-за заполнителя, который будет отображаться первым, пока не отобразится правильное изображение.
Можете ли вы обрезать изображение базы данных (обрезанное изображение). Так что после этого легко понять вашу ошибку в коде.