cast<R> method
Adapt this stream to be a Stream<R>.
This stream is wrapped as a Stream<R> which checks at run-time that
each data event emitted by this stream is also an instance of R.
Implementation
@override
Stream<R> cast<R>() {
var s = origin.cast<R>();
if (!isTextResponse()) {
recordResponse(
statusCode,
'返回结果不支持解析',
headers.toString(),
contentLength,
);
return s;
}
final asyncStream = s.asBroadcastStream();
asyncStream.listen((R event) {
if (event is Uint8List) {
final Uint8List result = event;
var encoding = getEncoding();
if (encoding != null) {
recordResponse(
statusCode,
encoding.decode(result.toList()),
headers.toString(),
event.length,
);
} else {
recordResponse(
statusCode,
'返回结果解析失败',
headers.toString(),
contentLength,
);
}
} else if (event is String) {
recordResponse(statusCode, event, headers.toString(), contentLength);
} else {
recordResponse(
statusCode,
'unknown type:${event.runtimeType}',
headers.toString(),
contentLength,
);
}
});
return asyncStream.repeatLatest();
}