首页 > 解决方案 > 使用提供程序更改列表视图构建器中的值

问题描述

我有购物应用程序想要创建愿望清单,我做了很多正确的事情,只是当我想检查一个产品时检查所有产品,当我想增加或减少产品数量时,所有产品数量变化如下图所示,我的代码:

提供者:

class ProductProvider with ChangeNotifier {
  List<Product> products = [];
  bool isAdded = false;
  int count = 0;
  void chane_add_color() {
    isAdded = !isAdded;
    notifyListeners();
  }

  void add_count() {
    count++;

    notifyListeners();
  }

  void rem_count() {
    if (count > 0) {
      count--;
    }
    notifyListeners();
  }
}

我的列表磁贴左尾:

trailing: Consumer<ProductProvider>(
                        builder: (context, prod, child) {
                      return Wrap(
                        spacing: 35,
                        children: <Widget>[
                          Column(
                            children: [
                              InkWell(
                                  onTap: prod.add_count,
                                  child: Icon(Icons.add, color: Colors.green)),
                              Text('${prod.count}'),
                              InkWell(
                                  onTap: prod.rem_count,
                                  child: Icon(Icons.remove, color: Colors.red)),
                            ],
                          ),
                          IconButton(
                            onPressed: prod.chane_add_color,
                            icon: Icon(Icons.favorite,
                                color: prod.isAdded ? Colors.red : Colors.grey),
                          ),
                        ],
                      );
                    }),

结果 :

在此处输入图像描述

我想它需要一个计数器列表,但不知道该怎么做

有什么建议吗?

标签: fluttershopping-cartprovider

解决方案


这是通知程序类:

class ProductModel extends ChangeNotifier {
   List<Map<String, dynamic>> _products = [
    {'product': 'mercedes', 'count': 0, 'isFavorite': false},
    {'product': 'audi', 'count': 0, 'isFavorite': false},
    {'product': 'bmw', 'count': 0, 'isFavorite': false},
    {'product': 'volvo', 'count': 0, 'isFavorite': false}
  ];
  List<Map<String, dynamic>> get products => _products;
  
  ProductModel();
  ProductModel.instance();
  
  addFavorite({int index}) {
    _products[index]['isFavorite'] = !_products[index]['isFavorite'];
    notifyListeners();
  }

  incrementCounter({int index}) {
    _products[index]['count'] += 1;
    notifyListeners();
  }
}

这是你的小部件:

class ProductView extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

   return Scaffold(
      body: ChangeNotifierProvider<ProductModel>(
        create: (context) => ProductModel.instance(),
        child: Consumer<ProductModel>(
          builder: (context, viewModel, child) {
            return ListView.builder(
              itemCount: viewModel.products.length,
              itemBuilder: (context, index) {
                return ListTile(
                  leading: FlatButton(
                    child: Text('${viewModel.products[index]['count']} +'),
                    onPressed: () {
                      viewModel.incrementCounter(index: index);
                    },
                  ),
                  title: Text(viewModel.products[index]['product']),
                  trailing: IconButton(
                    icon: Icon(
                      Icons.favorite,
                      color: viewModel.products[index]['isFavorite']
                          ? Colors.red
                          : Colors.grey,
                    ),
                    onPressed: () {
                      viewModel.addFavorite(index: index);
                    },
                  ),
                );
              },
            );
          },
        ),
      ),
    );
  }
}

推荐阅读