import 'package:flutter/material.dart'; import '../http_api/ArticleApi.dart'; import '../models/ArticuloModel.dart'; class ArticleSearchDelegate extends SearchDelegate { final ArticleApi articleApi = ArticleApi(); ArticleSearchDelegate() : super(searchFieldLabel: 'Buscar artículos'); @override List buildActions(BuildContext context) { return [ IconButton( icon: Icon(Icons.clear), onPressed: () { query = ''; }, ), ]; } @override Widget buildLeading(BuildContext context) { return IconButton( icon: AnimatedIcon( icon: AnimatedIcons.menu_arrow, progress: transitionAnimation, ), onPressed: () { close(context, 'home'); }, ); } @override Widget buildResults(BuildContext context) { return FutureBuilder>( future: articleApi.searchArticles(query), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { return Center(child: Text('No articles found.')); } else { final articles = snapshot.data!; return ListView.builder( itemCount: articles.length, itemBuilder: (context, index) { final article = articles[index]; return ListTile( title: Text(article.nombre), subtitle: Text(article.precios.isNotEmpty ? '\$${article.precios.first.precio}' : 'No price available'), trailing: IconButton( icon: Icon(Icons.add_shopping_cart), onPressed: () { close(context, article.nombre); }, ), ); }, ); } }, ); } @override Widget buildSuggestions(BuildContext context) { if (query.isEmpty) { return Center(child: Text('Introduce un término de búsqueda')); } return FutureBuilder>( future: articleApi.searchArticles(query), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { return Center(child: Text('No articles found.')); } else { final articles = snapshot.data!; return ListView.builder( itemCount: articles.length, itemBuilder: (context, index) { final article = articles[index]; return ListTile( title: Text(article.nombre), subtitle: Text(article.precios.isNotEmpty ? '\$${article.precios.first.precio}' : 'No price available'), trailing: IconButton( icon: Icon(Icons.add_shopping_cart), onPressed: () { close(context, article.nombre); }, ), ); }, ); } }, ); } }