首页 > 解决方案 > 如何将数据添加到颤振流?

问题描述

这是我设置的方式stream

  StreamController<List<MessageFromCloudDetail>> _messageFromCloudDetail;

这是向其中添加数据的方法

ChatApiClient().fetchDetail(http.Client(),documentId).then((data){
    _messageFromCloudDetail.add(data);
});

这是我的streambuilder

StreamBuilder <List<MessageFromCloudDetail>>(
                            stream:_messageFromCloudDetail.stream,
                            builder: (context, snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.none:
                                case ConnectionState.waiting:
                                  return Container(
                                    child: Center(
                                      child: CircularProgressIndicator(),
                                    ),
                                  );
                                default:
                                  return new Flexible(
                                    child: ChatBuilder(
                                        querySnapshot: snapshot.data,
                                        userFullname: userFullname,
                                        userId: userId,
                                        roomId: documentId),
                                  );
                              }
                            }),

对于第一次加载/打开,数据正在显示。但是,当我尝试添加这样的新数据时

    ChatApiClient().inputDetail(documentId, userId, _textController.text ).then((result){
 // [{"chatDetailId":"3","roomId":"1","from":"2","messageContent":"4","createdDate":"2019-12-02 13:53:25","chatImage":null}] 
      _messageFromCloudDetail.sink.add(result);
    });

但它正在更改为新的 json 而不是添加新数据。所以我的问题是,如何将新数据添加到流中?

注意:请不要告诉我重新加载所有数据。

这里的日志

第一个加载页面

I/flutter (19129): AsyncSnapshot<List<MessageFromCloudDetail>>(ConnectionState.waiting, null, null)
I/flutter (19129): AsyncSnapshot<List<MessageFromCloudDetail>>(ConnectionState.active, [Instance of 'MessageFromCloudDetail'], null)

在我提交了一些东西之后

W/IInputConnectionWrapper(19129): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(19129): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(19129): getTextAfterCursor on inactive InputConnection
I/flutter (19129): AsyncSnapshot<List<MessageFromCloudDetail>>(ConnectionState.active, [Instance of 'MessageFromCloudDetail'], null)

我的课

class MessageFromCloudDetail {
  String roomId;
  String from;
  String messageContent;
  String createdDate;
  String chatImage;

  MessageFromCloudDetail(
      {this.roomId, this.from, this.messageContent, this.createdDate, this.chatImage});

  factory MessageFromCloudDetail.fromJson(Map<String, dynamic> json) {
    return MessageFromCloudDetail(
        roomId: json['roomId'] as String,
        from: json['from'] as String,
        messageContent: json['messageContent'] as String,
        createdDate: json['createdDate'] as String,
        chatImage: json['chatImage'] as String
    );
  }
}

标签: flutter

解决方案


我认为您只是用最新数据替换旧数据。我不知道您的数据结构是如何制作的,但您可能需要将新数据附加到最旧的数据。


推荐阅读