article_search_delegate.dart 2.56 KB
Newer Older
yenisleydi committed
1
import 'package:flutter/material.dart';
yenisleydi committed
2
import 'package:provider/provider.dart';
yenisleydi committed
3 4
import 'package:primer_practica/src/controllers/articles_controller.dart';
import 'package:primer_practica/src/models/articles_model.dart';
yenisleydi committed
5
import 'package:primer_practica/src/providers/carrito_providers.dart'; // Importa CarritoProvider
yenisleydi committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

class ArticleSearchDelegate extends SearchDelegate {
  final ArticleController articleCtrl = ArticleController();

  ArticleSearchDelegate() : super();

  @override
  List<Widget> 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, null);
      },
    );
  }

  @override
  Widget buildResults(BuildContext context) {
    return Container();
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    if (query.isEmpty) {
      return Center(child: Text('Ingrese el texto para buscar artículos.'));
    }

    return FutureBuilder<List<ArticlesModel>>(
      future: articleCtrl.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 se encontraron artículos.'));
        } 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[0].precio.toStringAsFixed(2)}'
                    : 'Sin precio'),
                trailing: IconButton(
                  icon: Icon(Icons.shopping_cart),
                  onPressed: () {
yenisleydi committed
72
                    final carritoProvider = Provider.of<CarritoProvider>(context, listen: false);
yenisleydi committed
73 74
                    carritoProvider.agregarCarrito(article);
                    close(context, null);
yenisleydi committed
75 76 77 78 79 80 81 82 83 84
                  },
                ),
              );
            },
          );
        }
      },
    );
  }
}