我编写了这段代码,以便在蓝色包的帮助下,在我的颤振应用程序中扫描蓝牙设备。
Stream<List<ScanResult>> scannedDevices(int durationSeconds) async* {
Stream<List<ScanResult>> stream = _flutterBlue.scanResults;
List<ScanResult> payload = List<ScanResult>.empty(growable: true);
_flutterBlue.startScan(timeout: Duration(seconds: durationSeconds));
await for (List<ScanResult> results in stream) {
payload.clear();
for (ScanResult result in results) {
payload.add(result);
}
yield payload;
}问题是,scanResults流很受欢迎(请参阅这里),因此await for循环将永远运行,而我的scannedDevices流也将永远运行。
是否有办法在await for通过后中断scanDuration循环?谢谢
发布于 2022-07-26 11:48:53
是的,您只需返回null就可以中断循环。
Stream<List<ScanResult>> scannedDevices(int durationSeconds)
async* {
Stream<List<ScanResult>> stream = _flutterBlue.scanResults;
List<ScanResult> payload = List<ScanResult>.empty(growable:
true);
_flutterBlue.startScan(timeout: Duration(seconds:
durationSeconds));
await for (List<ScanResult> results in stream) {
payload.clear();
for (ScanResult result in results) {
payload.add(result);
}
return payload;
}发布于 2022-07-26 11:56:58
只需向您正在侦听的流添加一个timeout即可。
另一种选择是使用StreamTransformer,而不是使用await for。
Stream<List<ScanResult>> scannedDevices(int durationSeconds) async* {
Stream<List<ScanResult>> stream = _flutterBlue.scanResults.timeout(Duration(seconds: durationSeconds));
List<ScanResult> payload = List<ScanResult>.empty(growable: true);
_flutterBlue.startScan(timeout: Duration(seconds: durationSeconds));
await for (List<ScanResult> results in stream) {
payload.clear();
for (ScanResult result in results) {
payload.add(result);
}
yield payload;
}
}https://stackoverflow.com/questions/73122789
复制相似问题