queryBooks function
Query a list of books
query parameter must not be null and must not be empty.
Spaces characters are allowed
Set queryType to specify the search by a specific keyword
Set langRestrict to restrict the query to a
specific language
Set orderBy to order the query by newest or relevance
and printType to filter in books or magazines
Set maxResults to set the max amount of results.
Set startIndex for pagination
Example of querying:
void main(List<String> args) async {
final books = await queryBooks(
'twilight',
maxResults: 3,
printType: PrintType.books,
orderBy: OrderBy.relevance,
);
books.forEach((Book book) {
print(book);
});
}
Implementation
Future<List<Book>> queryBooks(
String query, {
QueryType? queryType,
String? langRestrict,
int maxResults = 10,
OrderBy? orderBy,
PrintType? printType = PrintType.all,
int startIndex = 0,
bool reschemeImageLinks = false,
}) async {
assert(query.isNotEmpty);
// assert(startIndex <= maxResults);
var url = 'https://www.googleapis.com/books/v1/volumes?q=';
if (queryType != null) url += queryType.name + ':';
var q = '$url'
'${query.trim().replaceAll(' ', '+')}'
'&maxResults=$maxResults'
'&startIndex=$startIndex';
if (langRestrict != null) q += '&langRestrict=$langRestrict';
if (orderBy != null) {
q += '&orderBy=${orderBy.toString().replaceAll('OrderBy.', '')}';
}
if (printType != null) {
q += '&printType=${printType.toString().replaceAll('PrintType.', '')}';
}
final result = await http.get(Uri.parse(q));
if (result.statusCode == 200) {
final books = <Book>[];
final list = (jsonDecode(result.body))['items'] as List<dynamic>?;
if (list == null) return [];
for (final e in list) {
books.add(Book.fromJson(e, reschemeImageLinks: reschemeImageLinks));
}
return books;
} else {
throw (result.body);
}
}