微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用提供程序的更改列表图块尾随

如何解决使用提供程序的更改列表图块尾随

问题在于,当点击列表图块时,所有列表图块的数量都会增加

我有一个具有此构建方法的无状态小部件:

final ProductsList productsList = ProductsList(context);
return Scaffold(
        body: Center(child: productWidget(productsList,args)));
  }

这是ProductWidget


  FutureBuilder productWidget(productsList) {
    return FutureBuilder(
      future: getProducts,builder: (context,products) {
        switch (products.connectionState) {
          case ConnectionState.waiting:
            return Text('Loading....');
          default:
            return Scaffold(
                body: productsList.build(products.data));
        }
      },);

这是productsList.build的作用:

  ProductsList(this.context);

  Padding getProduct(name) {
    int _quantity = Provider.of<Quantity>(context).getQuantity();
    return ListTile(
        key: UniqueKey(),onTap: () {
          Provider.of<Quantity>(context,listen: false).incrementQuantity();
        },title: Text(name),trailing: Text("$_quantity"),),);
  }

  ListView build(products) {
    List<Widget> _products = new List();

    for (var i = 0; i < products.length; i++) {
      _products.add(getProduct(products[i].name));
    }

    return ListView(
      children: _products,);
  }

我正在使用此changeNotifier:


class Quantity extends ChangeNotifier {
  int _quantity = 0;

  void incrementQuantity(){
    _quantity += 1;
    notifyListeners();
  }

  int getQuantity() {
    return _quantity;
  }
}

我想点击列表图块并仅增加尾随显示的值,而不增加其他值。

我正在应用程序的主文件中使用多提供商。

解决方法

提供商需要按产品跟踪数量。您的提供商将数量作为单个整数进行跟踪,因此您看到的结果对于您的代码是正确的。

数量应为列表。您还可以设置初始值。

然后

incrementQuantity(int index) {
 increment quantity[index] here
}

get quantity(int index){
 return quantity[index]
}

顺便说一句,我认为,通过研究将ListTile与Provider一起使用,您的工作将大大受益。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。