searchBooks method

Future<void> searchBooks()

Esegue la ricerca di libri tramite l'API di Google Books. Utilizza il testo inserito dall'utente come query (ISBN o titolo). Aggiorna lo stato di caricamento e i risultati della ricerca.

Lancia un'eccezione se si verifica un errore o se non vengono trovati libri.

@return Future<void> completato al termine della ricerca.

Implementation

Future<void> searchBooks() async {
  final String query = searchQueryController.text.trim();
  if (query.isEmpty) {
    _searchResults = [];
    return;
  }

  _isLoading = true;
  _searchResults = [];

  // Provo ad effettuare la ricerca tramite l'API
  try {
    // Se il testo inserito dall'utente non é un isbn
    if (isbnValidator.notIsbn(query, strict: false)) {
      debugPrint('DEBUG: Ricerca per titolo: $query');
      _searchResults = await _apiService.searchBooks(query: query);
    } else {
      // Se il testo inserito dall'utente é un isbn, lo pulisco e lo uso per la ricerca
      String cleanQuery = isbnValidator.toCanonical(query);
      debugPrint('DEBUG: Ricerca per ISBN: $cleanQuery');
      _searchResults = await _apiService.searchBooks(isbn: cleanQuery);
    }

    if (_searchResults.isEmpty) {
      throw Exception('Nessun libro trovato per la tua ricerca.');
    }
  } catch (e) {
    debugPrint('Errore durante la ricerca su Google Books: $e');
    _searchResults = [];
    // Rilancio l'eccezione per gestirla a livello di UI
    throw Exception('Errore durante la ricerca:');
  } finally {
    _isLoading = false;
  }
}