You need to sign in or sign up before continuing.
custom_search_delegate.dart 2.72 KB
Newer Older
1 2 3 4 5 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../models/article_model.dart';
import '../providers/carrito_provider.dart';

class CustomSearchDelegate extends SearchDelegate<String> {
  final List<ArticleModel> searchList;

  CustomSearchDelegate(this.searchList);

  @override
  List<Widget> buildActions(BuildContext context) {
    return [
      IconButton(
        icon: Icon(Icons.clear),
        onPressed: () {
          query = '';
        },
      ),
    ];
  }

  @override
  Widget buildLeading(BuildContext context) {
    return IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: () => Navigator.of(context).pop(),
    );
  }

  @override
  Widget buildResults(BuildContext context) {
    final List<ArticleModel> searchResults = searchList
        .where((item) => item.nombre.toLowerCase().contains(query.toLowerCase()))
        .toList();

    //AGREGAR PRODUCTO AL CARRITO
    return Scaffold(
      body: ListView.builder(
        itemCount: searchResults.length,
        itemBuilder: (context, index) {
          final article = searchResults[index];
          return ListTile(
            title: Text(article.nombre),
            subtitle: Text('Precio: ${article.precios[0].precio}'),
            trailing: IconButton(
              //icono del carrito
              icon: Icon(Icons.add_shopping_cart, color: Colors.indigo),
              onPressed: () {
                //Llamamos el provider carrito para agregar un articulo
                final carritoProvider = Provider.of<CarritoProvider>(context, listen: false);
                carritoProvider.addToCart(article);
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Artículo agregado al carrito')),
                );
              },
            ),
          );
        },
      ),
    );
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    final List<ArticleModel> suggestionList = query.isEmpty
        ? []
        : searchList
        .where((item) => item.nombre.toLowerCase().contains(query.toLowerCase()))
        .toList();

    return ListView.builder(
      itemCount: suggestionList.length,
      itemBuilder: (context, index) {
        return Container(
          color: Colors.grey[200],
          child: ListTile(
            leading: Icon(Icons.search, color: Colors.blue),
            title: Text(
              suggestionList[index].nombre,
              style: TextStyle(
                color: Colors.black,
                fontWeight: FontWeight.bold,
              ),
            ),
            onTap: () {
              query = suggestionList[index].nombre;
              showResults(context);
            },
          ),
        );
      },
    );
  }
}