flutter - 如何更新列表中的小部件
问题描述
我有一个聊天列表,如果有用户尚未阅读的新消息,我想在每张聊天卡上显示。
该列表位于 StatefulWidget 中,该列表包含也是 StatefulWidgets 的重构卡,我还编写了代码以与 Firestore 一起检查用户是否已阅读消息,但我仍然不知道发生了什么,因为它没有t 更新未读消息的图标。
数据库中的数据发生变化,但聊天卡中没有。如果我重新加载应用程序,因为卡片被重建,那么它确实会改变。
这是聊天卡代码:
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() 并检查已安装
void unreadMessagesVerifier() {
_firestore.collection('chatRoom').document(_chatRoomID).get().then((data) async {
if (mounted) {
setState(() {
hasUnreadMessages = data['hasUnreadMessages'];
});
}
});
}
解决方案
我认为您的问题在于您调用 setState 的方式。尝试在未来完成后调用它。像这样:
void unreadMessagesVerifier() {
_firestore.collection('chatRoom').document(_chatRoomID).get().then((data) =>
data['hasUnreadMessages'].then(result){
setState((){
hasUnreadMessages = result;
});
});
}
顺便说一下格式化抱歉。
推荐阅读
- laravel - laravel 测验应用程序无法正常工作,谁能告诉我解决方案?
- javascript - 未捕获的类型错误:*_js__WEBPACK_IMPORTED_MODULE_1__.default 不是构造函数
- android - 有没有办法在使用木材为 android 的发布版本中记录文件名?
- python - 遍历枚举列表 - 如何跳过一个数字?
- algorithm - 持续资源分配/背包问题
- powershell - WSL 上的已删除 Shell 且无法访问 WSL
- java - 从 AbstractTableModel 扩展时如何切换 JTable 中复选框的值
- powershell - 将相同的字符串附加到PowerShell中CSV列中的所有变量
- scala - 编写 spark 脚本来读取文件
- php - 使用 get_the_term 获取所有父母和孩子