stream method Null safety

Stream<AccountResponse> stream()

Allows to stream SSE events from horizon. Certain endpoints in Horizon can be called in streaming mode using Server-Sent Events. This mode will keep the connection to horizon open and horizon will continue to return responses as ledgers close. See: Streaming

Implementation

Stream<AccountResponse> stream() {
  StreamController<AccountResponse> listener = StreamController.broadcast();
  bool cancelled = false;
  listener.onCancel = () {
    cancelled = true;
  };
  void createNewEventSource() {
    if (cancelled) {
      return;
    }
    EventSource.connect(this.buildUri()).then((eventSource) {
      eventSource.listen((Event event) {
        if (cancelled) {
          return null;
        }
        if (event.data == "\"hello\"") {
          return null;
        }
        if (event.event == "close") {
          createNewEventSource();
          return null;
        }
        AccountResponse accountResponse =
            AccountResponse.fromJson(json.decode(event.data!));
        listener.add(accountResponse);
      });
    });
  }

  createNewEventSource();
  return listener.stream;
}