首页 > 解决方案 > 如何在颤动中刷新聊天收件箱的消息流

问题描述

我是 Flutter 的新手,我开始使用 Flutter 和 Flutter Stream 创建一个简单的信使应用程序来处理获取消息内容的 API 调用。

还创建了消息控制器来更新和刷新消息列表

class MessageService {
  Client httpClient = Client();
  List<MessageModal> _messageList = [];

  Future<AppConfig> _getApiURL() async {
    final config = await AppConfig.forEnvironment('dev');
    return config;
  }

  Future<List<MessageModal>> getMessageThread(
      String senderId, String receiverId) async {
    var config = await _getApiURL();
    var url = config.baseUrl + "message/history";
    final response = await httpClient.post(url,
        headers: {"content-type": "application/json"},
        body: json.encode({
          "senderId": senderId,
          "receiverId": receiverId,
        }));

    if (response.statusCode == 200) {
      _messageList = messageListFromJson(response.body);
    } else {
      _messageList = [];
    }
    return _messageList;
  }
}

这是获取 API 数据的消息服务类

class MessageService {
  Client httpClient = Client();
  List<MessageModal> _messageList = [];

  Future<AppConfig> _getApiURL() async {
    final config = await AppConfig.forEnvironment('dev');
    return config;
  }

  Future<List<MessageModal>> getMessageThread(
      String senderId, String receiverId) async {
    var config = await _getApiURL();
    var url = config.baseUrl + "message/history";
    final response = await httpClient.post(url,
        headers: {"content-type": "application/json"},
        body: json.encode({
          "senderId": senderId,
          "receiverId": receiverId,
        }));

    if (response.statusCode == 200) {
      _messageList = messageListFromJson(response.body);
    } else {
      _messageList = [];
    }
    return _messageList;
  }
}

这是创建消息列表预览的 ui 预览

StreamBuilder<List<MessageModal>> _buildStreamBuilder() {
      return StreamBuilder<List<MessageModal>>(
//        stream: _messageService.getMessageThread("UID1", "UID2").asStream(),
        stream: streamController.counter,
        initialData: _messageList,
        builder:
            (BuildContext context, AsyncSnapshot<List<MessageModal>> snapshot) {
          print(snapshot.data);
          if (snapshot.hasError) {
            print(snapshot.error);
            return Center(
              child: Text("Something went wrong!"),
            );
          } else if (snapshot.hasData) {
            List<MessageModal> messages = snapshot.data;
            return _buildMessageHistory(messages);
          } else {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
        },
      );
    }

我需要更新消息并继续更新(发送 API 调用并获取数据以流式传输)消息预览。任何人都可以帮我解决这个问题。

标签: apiflutterstreammessage

解决方案


推荐阅读