onBrowse method
Implementation
@override
Stream<AlbumOre> onBrowse(path, [query, parent]) async* {
const r = FirestoreCodec.decode; // decoder
final s = [#pageSize, #pageToken, #orderBy]; //.*
x(data) => data..[Album.srcKey] = data['name'];
final uri = accessUri.resolve(resolvePath(path)).replace(
queryParameters: Query.splice(query, s)?.json,
scheme: 'https', // designate framework.*
);
final response = await client.get(uri);
final body = json.decode(response.body, reviver: r);
if (response.statusCode != 200) {
throw FirestoreException(response);
}
// yield single model
if (!body.containsKey('documents')) {
yield AlbumOre(x(body));
return;
}
// yield multiple models % no token
AlbumOre ore = AlbumOre(
body['documents'].map(x).toList(), // *............*
body['nextPageToken'], // *........................*
);
yield (parent as AlbumOre? ?? AlbumOre([])) + ore;
// yield multiple models % next token
if (ore.nextPageToken != null) {
yield* onBrowse(
path, // *.......................................*
(query ?? Queries).pageToken(ore.nextPageToken!),
(parent ?? AlbumOre([])) + ore, // *.............*
);
}
}