readBytes method

  1. @override
Future<List<int>> readBytes(
  1. int numBytes
)

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;
}