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!);
}