Firebase消息未按flutter draft顺序保存



我基本上正在构建一个消息应用程序,用户可以在其中添加消息(任务(,该消息将保存在firebase中。然后它应该在屏幕上显示为"0";messagebubbles";按顺序排列(屏幕底部最新的一个(。不过,这些信息并没有按顺序显示。查看我的firebase数据库集合,似乎没有按照消息到达的时间顺序保存消息。这是正常行为吗?这是否意味着我必须对快照进行排序?我以为快照会以与发送消息完全相同的顺序向我显示消息。

TextField(
controller: messageTextController,
autofocus: true,
textAlign: TextAlign.center,
cursorColor: Colors.white,
style: TextStyle(color: Colors.white, fontSize: 20.0),
onChanged: (newText) {
newTaskTitle = newText;
},
),
FlatButton(
child: Text(
'Add',
style: TextStyle(
color: kSlate,
),
),
color: kSlateBorder,
onPressed: () {
messageTextController.clear();
firestore.collection('Slate1').add({
'Task': newTaskTitle,
'User': loggedInUser.email,
});
Navigator.pop(context);
},
),

Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: firestore.collection('Test').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
final messages = snapshot.data.documents.reversed;
List<MessageBubble> messageBubbles = [];
for (var message in messages) {
final messageText = message.data['Task'];
final messageSender = message.data['User'];
final currentUser = loggedInUser.email;
final messageBubble = MessageBubble(
sender: messageSender,
text: messageText,
isMe: currentUser == messageSender,
);
messageBubbles.add(messageBubble);
}

Firestore中的文档不是按时间自然排序的。在控制台中,它们显示为按文档ID排序。

如果要对集合中的文档强制排序,则应使用文档字段。考虑为每条消息添加一个时间戳字段,然后使用该时间戳对查询进行排序。

如果其他人正在寻找答案/实现:

以下是我添加firebase服务器时间戳的方法

firestore.collection('Test1').add({
'Task': newTaskTitle,
'User': loggedInUser.email,
'Timestamp': FieldValue.serverTimestamp(),
});

然后根据时间戳在这里订购:

return StreamBuilder<QuerySnapshot>(
stream: firestore.collection('Test1').orderBy('Timestamp').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {

最新更新