readBytes method
Implementation
@override
Future<List<int>> readBytes(int numBytes) {
assert(numBytes >= 0);
if (numBytes == 0) {
return Future.value(<int>[]);
}
late StreamSubscription<List<int>> sub;
final result = <int>[];
final completer = Completer<List<int>>();
sub = stream.listen((bytes) {
final toTake = min(bytes.length, numBytes - result.length);
result.addAll(bytes.take(toTake));
if (result.length == numBytes) {
completer.complete(result);
sub.cancel();
}
}, onError: (err, stackTrace) {
completer.completeError(err, stackTrace);
}, onDone: () {
completer.completeError(StateError("Serial input stream closed prematurely."), StackTrace.current);
}, cancelOnError: true);
return completer.future;
}