Flutter 在返回列表之前等待流停止

Flutter 在返回列表之前等待流停止,flutter,dart,Flutter,Dart,因此,我有一个StreamSubscription,可以正确读取从我的设备接收到的数据 StreamSubscription<List<int>> _rxSubscription; List<List<int>> _response = new List<List<int>>(); _rxSubscription = _ble.subscribeToCharacteristic(_rx).listen((event) {

因此,我有一个StreamSubscription,可以正确读取从我的设备接收到的数据

StreamSubscription<List<int>> _rxSubscription;
List<List<int>> _response = new List<List<int>>();

_rxSubscription = _ble.subscribeToCharacteristic(_rx).listen((event) {
      _response.add(event);
    });

writeToDevice(List<int> command) async {
    _rxSubscription.resume();
    await _ble.writeCharacteristicWithoutResponse(_tx, value: command);
    return _response;
  }
当执行任何写入操作时,该数据连续传输,其长度根据“命令”的不同而不同,这意味着可能有n个数据包被发送回。现在在运行该函数之后,它返回一个空列表,因为在设备开始响应之前返回了_响应

我想做的是:只有在收集了所有数据并且设备停止响应之后,才能让_响应返回,即流停止流。在dart中我该怎么做?我不想使用计时器,因为数据可能需要更长或更短的时间。 (目前,数据包中没有表示消息结尾行结束的实现)

供应商说明:

我想做的是:只有在收集了所有数据并且设备停止响应之后,才能让_响应返回,即流停止流


根据听者的需要,这可以通过使用Future来简化。这是广播流吗?

它不是广播。它侦听设备通知。我希望它监听设备响应的所有数据,然后将其存储在_响应中,然后返回。我知道这可能是一个未来,但我希望最终的数据能够被接收和存储,因为需要对其执行许多操作。另外,您能否解释一下在这种情况下如何做到这一点?我明白您的问题所在。您希望使用流,这是您知道如何做的,但您希望缓存流数据并将其转发给其他消费者?这就像尝试从
未来
获取
int
而不使用
异步
函数一样。数据必须作为
流使用
没有时间或生命周期允许您同步读取
列表
。您可以尝试使用该语法来使用您的流。对!但我只想在流停止时将结果返回给消费者。使用者通过调用函数(rxSubscription.resume())启动流,并将停止它。调用函数2-3秒后,数据开始流式传输。如果没有任何指示消息结束的信息,并且如果您不想使用超时,您希望如何知道流式传输何时完成?@jamesdlin我知道,这一直困扰着我。但这是可能的,我在Kotlin的设备连接库的本机实现中看到了这一点。我在想,是否有一种方法可以在最后一次响应到达+1秒时进行检查,然后将其发送给消费者。他们就是这样做的。我已经更新了供应商的说明。第一个包[0,65,0,0]指示将要接收的包的数量。但是在他们的本地库中,他们没有这样的实现,他们只是等待所有消息到达,并使用数据长度来验证是否收到了所有消息。
I/flutter ( 5506): [[0, 65, 0, 0], [0, 0, 104, 220, 69, 91, 240, 63, 0, 0, 240, 100, 112, 209, 240, 63, 0, 0, 176, 19], [133, 233, 240, 63, 0, 0, 104, 126, 172, 204, 240, 63, 0, 0, 96, 250, 189, 193, 240, 63]]