searchBooks method
Esegue una ricerca di libri tramite l'API di Google Books.
Se viene fornito un isbn, la ricerca viene effettuata per ISBN.
Altrimenti, se viene fornita una query, la ricerca viene effettuata per titolo o autore.
Restituisce una lista di oggetti Libro trovati oppure una lista vuota se non ci sono risultati o in caso di errore.
Implementation
Future<List<Libro>> searchBooks({String? query, String? isbn}) async {
String searchParam = '';
// Se é presente un ISBN, lo uso come parametro di ricerca, altrimenti uso la query
if (isbn != null && isbn.isNotEmpty) {
searchParam = 'isbn:$isbn';
} else if (query != null && query.isNotEmpty) {
searchParam = query;
} else {
return []; // Nessun parametro di ricerca valido
}
// https://www.googleapis.com/books/v1/volumes?q=isbn:....
final url = '$_baseUrl?q=$searchParam&key=$_apiKey&maxResults=10';
debugPrint('DEBUG API: Calling API: $url');
try {
final response = await http.get(Uri.parse(url));
debugPrint('DEBUG API: Stato risposta: ${response.statusCode}');
debugPrint('DEBUG API: Corpo risposta: ${response.body}');
if (response.statusCode == 200) {
// Con decode prendo la risposta JSON e la converto in una struttura nativa di Dart (una mappa)
final Map<String, dynamic> data = json.decode(response.body);
/* Struttura della risposta JSON
{
"kind": "books#volumes",
"totalItems": 123,
"items": [ // array contenente i libri trovati
{
"kind": "books#volume",
"id": "...",
"volumeInfo": { ... }, // Dettagli del libro
// ... altri campi sul libro
},
{
// ... un altro libro
}
]
}
*/
// Accedo alla lista di libri trovati
final List<dynamic>? items = data['items'];
if (items != null && items.isNotEmpty) {
// Mappa tutti gli elementi trovati in una lista di Libri
return items
.map((jsonItem) => Libro.fromGoogleBooksJson(jsonItem))
.toList();
} else {
debugPrint('DEBUG API: Nessun elemento trovato nella risposta.');
}
} else {
debugPrint('Errore API: ${response.statusCode}');
debugPrint('Corpo della risposta: ${response.body}');
}
} catch (e) {
debugPrint('Errore nella chiamata API (catch): $e');
}
return []; // Nessun libro trovato o errore, ritorna una lista vuota
}