readln method
Implementation
@override
Future<String> readln([String linebreak = '\n']) {
final encoding = this.encoding;
final completer = Completer<String>();
final buffer = StringBuffer();
final stringSink = StringConversionSink.fromStringSink(buffer);
final byteSink = encoding.decoder.startChunkedConversion(stringSink);
late StreamSubscription<List<int>> sub;
sub = stream.listen((bytes) {
byteSink.add(bytes);
var string = buffer.toString();
final matches = linebreak.allMatches(string);
if (matches.isNotEmpty) {
string = string.substring(0, matches.first.start);
sub.cancel();
byteSink.close();
stringSink.close();
completer.complete(string);
}
}, onError: (error, stackTrace) {
sub.cancel();
byteSink.close();
stringSink.close();
completer.completeError(error, stackTrace);
}, onDone: () {
sub.cancel();
byteSink.close();
stringSink.close();
completer.completeError(StateError("Serial input stream closed prematurely."), StackTrace.current);
});
return completer.future;
}