Flutter,将字母流式传输为单个句子

问题描述 投票:0回答:1

我从服务器收到一串文字。目标是将单词动态地组合成单个句子。现在发生的情况如下,附加值,但每当添加新字母时,整个字符串就会重复。

eg: hi , how are you ?  // stream of words or letters



Expected : hi, how are you?

我得到的如下

hi
hi,
hi, how
hi, how are
hi, how are you
hi, how are you ?

我的目标是动态地将其添加到字符串中,以便我可以将其传递给 ui 进行渲染

StringBuffer buffer = StringBuffer();
String newPart = '';

subscription = _channel.stream.listen(
    (message) {
      final actualMessage = message['message']; // from where i get data or values
      if (actualMessage != 'END') {
        newPart += actualMessage;
        buffer.clear();
        buffer.write(newPart);
        debugPrint(buffer.toString().trim());
        add(UiEvent.response(
            message: buffer.toString().trim()));
      }
    },
    onError: (error) {
      debugPrint("stream Error $error");
    },
  );

我需要动态追加数据并将其发送到用户界面。我缺少什么?我怎样才能正确地实现这个?

string flutter dart stream stringbuffer
1个回答
0
投票

我想下面的代码负责在 UI 上显示文本:

add(UiEvent.response(message: buffer.toString().trim()));

“END”作为消息表示字符串的结束。

然后将您的代码更改为以下解决方案应该适合您。

String messageToDisplay = '';

subscription = _channel.stream.listen(
  (message) {
      final actualMessage = message['message']; // from where i get data or values
      if (actualMessage != 'END') {
          messageToDisplay += ' $actualMessage';
      } else {
          // debug
          debugPrint(messageToDisplay.trim());
          // display messageToDisplay in ui
          add(UiEvent.response(message: messageToDisplay.trim()));
          // then clear messageToDisplay to make 
          // it ready for the next set of strings
          messageToDisplay = '';
      }
},
  onError: (error) {
    debugPrint("stream Error $error");
  },
);
© www.soinside.com 2019 - 2024. All rights reserved.