# #flutter #dart #google-cloud-firestore #provider
Вопрос:
я буду показывать сообщение от firebase firestore в flutter , но когда я делаю условный снимок, всегда возвращающий false, это мой код
Обслуживание
Stream<List<MessageModel>> getMessagesByUserid({int userId}) {
try {
return firestore
.collection('messages')
.where('userId', isEqualTo: userId)
.snapshots()
.map((QuerySnapshot list) {
var result = list.docs.map<MessageModel>((DocumentSnapshot message) {
print('from service : ' message.data().toString());
return MessageModel.fromJson(message.data());
}).toList();
result.sort(
(MessageModel a, MessageModel b) =>
a.createdAt.compareTo(b.createdAt),
);
return resu<
});
} catch (e) {
throw Exception(e);
}
}
и позвоните с этим
Widget content() {
return StreamBuilder<List<MessageModel>>(
stream: MessageService()
.getMessagesByUserid(userId: authprovider.user.id),
builder: (context, snapshot) {
print(snapshot.hasData);
if (snapshot.hasData) {
return ListView(
padding: EdgeInsets.symmetric(
horizontal: defaultMargin,
),
children: snapshot.data
.map(
(MessageModel message) => ChatBubble(
isSender: message.isFromUser,
text: message.message,
product: message.product,
),
)
.toList(),
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
});
}
когда я печатаю в сервисе , я получаю
I/flutter (29881): from service : {createdAt: 2021-06-28 16:29:25.106709, product: {}, userImage: https://ui-avatars.com/api/?name=ekaamp;color=7F9CF5amp;background=EBF4FF, isFromUser: true, message: tanpa, userName: eka, userId: 2, updatedAt: 2021-06-28 16:29:25.106811}
но когда я печатаю(snapshot.hasData), всегда возвращаю false
I/flutter (29881): false
Комментарии:
1. Изменение
Stream
наFuture
в Сервисах2. Возможно, ваш код для getMessagesByUserid может выдавать и ошибаться….. Так что верните что-нибудь и в блоке catch, чтобы посмотреть
3.
snapshot.connectionState'
Скорее проверь, чемsnapshot.hasData
. Состояние соединения может быть ожидающим, нет, активным или выполненным, иhasData
все ещеfalse
Stream
может быть возвращеноnull
Ответ №1:
Если вам требуется большая детализация при использовании StreamBuilder
, то лучше протестируйте snapshot.connectionState
, а не snapshot.hasData
.
snapshot.hasData
все еще может быть ложным, если поток возвращает значение null