【发布时间】:2020-11-21 15:48:33
【问题描述】:
我有一个聊天列表,如果有用户尚未阅读的新消息,我想在每张聊天卡上显示。
列表在 StatefulWidget 中,列表包含重构的卡片也是 StatefulWidgets,我还编写了代码与 Firestore 一起检查用户是否已阅读消息,但我仍然不知道发生了什么,因为它不会更新未读消息的图标。
数据库中的数据发生变化,但聊天卡中没有。如果我重新加载应用程序,因为卡片被重建,那么它确实会改变。
这是聊天卡代码:
bool hasUnreadMessages = false;
void unreadMessagesVerifier() {
setState(() {
_firestore.collection('chatRoom').document(_chatRoomID).get().then((data) async {
hasUnreadMessages = await data['hasUnreadMessages'];
});
});
}
@override
Widget build(BuildContext context) {
unreadMessagesVerifier();
return GestureDetector(
child: Stack(
children: <Widget>[
Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Flexible(
child: Container(
width: double.infinity,
child: Text(
widget.lastMessage,
),
),
),
hasUnreadMessages
? Container(
margin: EdgeInsets.fromLTRB(10, 0, 5, 0),
child: CircleAvatar(
radius: 7,
backgroundColor: Colors.blue,
),
)
: SizedBox(),
],
),
),
],
),
onTap: widget.onTap,
); // ChatCard
}
如果需要更多信息,请告诉我!
================================================ ========================== 编辑:
感谢@Pedro R.
我只需要移动 SetState() 并检查 mounted
void unreadMessagesVerifier() {
_firestore.collection('chatRoom').document(_chatRoomID).get().then((data) async {
if (mounted) {
setState(() {
hasUnreadMessages = data['hasUnreadMessages'];
});
}
});
}
【问题讨论】:
标签: flutter google-cloud-firestore