【问题标题】:How to fix issue with firestore collection snapshot如何解决 Firestore 集合快照的问题
【发布时间】:2019-11-10 16:39:04
【问题描述】:

我正在尝试按从最新到最旧的顺序从 Firebase 收集我的消息。但是我的消息在最后一个之后和最后一个之前随机显示一次。 尽管我的最终谁通过反向订购我的收藏

我尝试实时查找任何订单主题,但在 Flutter 和 Firestore 上找不到任何相关信息。 (也许我是盲人或者我看起来不太好)

class MessagesStream extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: _fireStore.collection('messages').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 messageSender = message.data['sender'];
          final messageText = message.data['text'];

          final currentUser = loggedInUser.email;

          final messageBubble = MessageBubble(
            sender: messageSender,
            text: messageText,
            isMe: currentUser == messageSender,
          );
          messageBubbles.add(messageBubble);
        }
        return Expanded(
          child: ListView(
            reverse: true,
            padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
            children: messageBubbles,
          ),
        );
      },
    );
  }
}

我将我的数据添加到这个小部件中:

FlatButton(
                    onPressed: () {
                      messageTextController.clear();
                      _fireStore.collection('messages').add(
                          {'text': messageText, 'sender': loggedInUser.email});
                    },
                    child: Text(
                      'Send',
                      style: kSendButtonTextStyle,
                    ),
                  ),

【问题讨论】:

  • 如何将数据添加到 Firestore添加代码
  • FlatButton( onPressed: () { messageTextController.clear(); _fireStore.collection('messages').add( {'text': messageText, 'sender': loggedInUser.email}); }, child: Text( 'Send', style: kSendButtonTextStyle, ), ), 我将我的数据添加到这个小部件中

标签: firebase flutter google-cloud-firestore


【解决方案1】:

在添加数据时,您可以在消息文档中添加时间戳/服务器时间戳,然后使用它来排列您的数据示例"timestamp": Timestamp.now(),,然后查询您的数据.orderby('timestamp' ,descending :true)

【讨论】:

  • 谢谢你,这正是我要找的!现在我将尝试很好地实现它:D
  • 我建议在使用时间戳时,为避免数据索引错误,您可以设置服务器默认时间戳,例如 +0300 GMT。
猜你喜欢
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 2018-03-18
  • 1970-01-01
  • 2019-08-29
  • 2020-09-26
相关资源
最近更新 更多