stream method
Send a HTTP-request that results in a stream of ServerSentEvents in form of a EventSource.
This methods makes a GET-requests (or whatever verb
is set to) with the
given url
. It will add some additional headers to headers
, leading to
the server returning an "endless" stream of data in form of
ServerSentEvents.
If the server supports it, and you had to cancel a stream at some point,
you might be able to resume it by passing the
ServerSentEvent.lastEventId of the last event that has been received to
lastEventId
.
If the requests succeeds, the returned future will resolve to a stream of SSEs, an EventSource. If the request does not succeed (any statuscode but 200), instead a ClientStreamException will be thrown, containing the faulty result.
Implementation
Future<EventSource> stream(
Uri url, {
Map<String, String>? headers,
String? lastEventId,
String verb = 'GET',
}) async {
final request = Request(verb, url);
if (headers != null) {
request.headers.addAll(headers);
}
request.headers['Accept'] = 'text/event-stream';
request.headers['Cache-Control'] = 'no-cache';
if (lastEventId != null) {
request.headers['Last-Event-ID'] = lastEventId;
}
final response = await send(request);
if (response.statusCode != 200) {
throw ClientStreamException(await Response.fromStream(response));
}
return EventSource(response);
}