【问题标题】:How to use a stream builder to return message from the last message field in my message collection如何使用流构建器从我的消息集合中的最后一个消息字段返回消息
【发布时间】:2021-03-10 14:53:47
【问题描述】:

请我需要流生成器小部件来返回我的消息集合中的最后一条消息(红色矩形框)。我在下面使用的返回一个空字符串必须在 Text 小部件中提供。

        class MessageScreen extends StatefulWidget {
          final String uid;
          MessageScreen(this.uid);
          @override
          _MessageScreenState createState() => _MessageScreenState();
        }
        
        class _MessageScreenState extends State<MessageScreen> {
          String uid;
          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                elevation: 0.0,
                title: Center(
                  widthFactor: 5,
                  child: Text(
                    'Message',
                    style: mystyle(
                      20.0,
                      Style.Colors.titleColor,
                    ),
                  ),
                ),
              ),
              body: LastMessageContainer(
                  stream:
                      messageCollection.orderBy('lastMessage.timestamp', descending: true).where('users', arrayContains: uid).snapshots()),
            );
          }
        }
        
        class LastMessageContainer extends StatelessWidget {
          final stream;
        
          LastMessageContainer({
            @required this.stream,
          });
        
          @override
          Widget build(BuildContext context) {
            return StreamBuilder(
              stream: stream,
              builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if (snapshot.hasData) {
                  var docList = snapshot.data.docs;
        
                  if (docList.isNotEmpty) {
                    Message message = Message.fromMap(docList.last.data());
                    return SizedBox(
                      width: MediaQuery.of(context).size.width * 0.6,
                      child: Text(
                        message.message,
                        maxLines: 1,
                        overflow: TextOverflow.ellipsis,
                        style: TextStyle(
                          color: Colors.grey,
                          fontSize: 14,
                        ),
                      ),
                    );
                  }
                  return Text(
                    "No Message",
                    style: TextStyle(
                      color: Colors.grey,
                      fontSize: 14,
                    ),
                  );
                }
                return Text(
                  "..",
                  style: TextStyle(
                    color: Colors.grey,
                    fontSize: 14,
                  ),
                );
              },
            );
          }
         }
         ```

   

]

当我尝试从消息集合下的最后一个消息字段中获取消息时,它返回的错误,即必须在 Text 小部件中提供空字符串发生在 Text(message.message) 中。

【问题讨论】:

  • 这看起来更像是 javascript 而不是 java。请选择一种语言。 Java 与 javascript 没有关系。
  • 我不明白你的评论。我需要一个小部件来从我的消息集合@NomadMaker 中的最后一个消息字段中获取数据
  • 你是用什么语言来写这个javascript的?
  • Java @NomadMaker
  • 我对java有很多经验,这看起来不像我知道的java。

标签: flutter flutter-layout


【解决方案1】:

首先,您必须将时间戳存储在生成消息的位置。之后,您可以简单地在您的集合上调用“orderBy”并按时间戳对其进行排序。

【讨论】:

  • 请您查看我发布的屏幕截图,因为我已经将消息存储在时间戳中,但现在要从问题的最后一个消息字段中获取数据。我的目标是保存每个用户的最后一条消息对话。谢谢
  • 尝试只写“timestamp”而不是“lastmessage.timestamp”
  • 当我编辑到“时间戳”时,它不返回任何消息。
  • 你试过用升序代替降序吗?
  • 仍然没有返回任何数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2014-08-17
  • 2011-07-27
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多