Stream searchIssuePRs()

in lib/github_queries.dart [102:146]


  Stream<dynamic> searchIssuePRs(String queryString) async* {
    var after = 'null';
    bool? hasNextPage;
    do {
      var query = _searchIssuesOrPRs
          .replaceAll(r'${query}', queryString.replaceAll('"', '\\"'))
          .replaceAll(r'${after}', after)
          .replaceAll(r'${issueResponse}', Issue.graphQLResponse)
          .replaceAll(r'${pageInfoResponse}', PageInfo.graphQLResponse)
          .replaceAll(r'${pullRequestResponse}', PullRequest.graphQLResponse);
      final options = QueryOptions(document: gql(query));
      if (_printQuery) print(query);
      final page = await _client.query(options);
      if (page.hasException) {
        print(query);
        print(page.exception);
        print(page.data);
        throw (page.exception.toString());
      }
      // Paginate information
      try {
        PageInfo pageInfo =
            PageInfo.fromGraphQL(page.data!['search']['pageInfo']);
        hasNextPage = pageInfo.hasNextPage;
        after = '"${pageInfo.endCursor}"';
      } on Error {
        return;
      }

      var buffer = [];
      var bufferIndex = 0;
      var edges = page.data!['search']['nodes'];
      edges.forEach((edge) {
        dynamic item = edge['__typename'] == 'Issue'
            ? Issue.fromGraphQL(edge)
            : PullRequest.fromGraphQL(edge);
        buffer.add(item);
      });
      if (buffer.isNotEmpty) {
        do {
          yield buffer[bufferIndex++];
        } while (bufferIndex < buffer.length);
      }
    } while (hasNextPage!);
  }