首页 > 解决方案 > Flutter web socket,事件之间的异步方法

问题描述

我有一个 websocket,服务器可以在一段时间内发送许多事件(消息)。对于每个事件,我必须调用一个异步函数,该函数在显示第二个事件之前说出句子(flutter-tts)。这样做的正确方法是什么?使用数组流?使用 List.builder ?

我需要在 Flutter 中准确地复制这篇文章(在 angular/rxjs 中):

聊天角websocket,顺序显示元素

谢谢你的帮助 !

添加了一些代码以便更好地理解:

...

    socket.on('messageToClient', (data) {
      print("socket $data");
      MessageModel message = MessageModel.fromJson(data);
      setState(() {
        _messages.add(message);
      });
    });

ListView.builder(
                    scrollDirection: Axis.vertical,
                    shrinkWrap: true,
                    itemCount: _messages.length,
                    itemBuilder: (BuildContext context, int indexMessage) {
                      print("index");
// Seems it's not waiting here
                      return FutureBuilder(
                          future: _speak(_messages[indexMessage].message),
                          builder: (context, snapshot) {
                            switch (snapshot.connectionState) {
                              case ConnectionState.waiting:
                                return CircularProgressIndicator();
                              default:
                                if (snapshot.hasError)
                                  return Text('Error: ${snapshot.error}');
                                else {
                                  return TextMessage(
                                    message: _messages[indexMessage].message,
                                    author: _messages[indexMessage].author,
                                    hint: _messages[indexMessage].hint,
                                    options: _messages[indexMessage].options,
                                    giveVoice:
                                        _messages[indexMessage].giveVoice,
                                  );
                                }
                            }
                          });
                    }),
...

标签: flutter

解决方案


你到底是什么意思:

对于每个事件,我必须调用一个异步函数_在显示第二个事件之前说出句子

如果你的意思是使用 Flutter显示“句子”,你可以试试这个:

理想情况下,您将能够访问listenwebsocket。这样做会给你一种Stream(我认为)。然后使用StreamBuilderFlutter 中的小部件更新来自 websocket 的每个事件的 UI。也许ListView.builderStreamBuilder.


推荐阅读