【问题标题】:Change List Tile trailing using provider使用提供者更改列表平铺尾随
【发布时间】:2020-12-30 01:30:14
【问题描述】:

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

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

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;
  }
}

我想点击一个列表图块并增加它的值,它显示在尾部,而不是其他值。

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

【问题讨论】:

    标签: flutter listview flutter-provider


    【解决方案1】:

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

    数量应该是列表。也可以设置初始值。

    然后

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

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

    另一方面,在我看来,通过研究将 ListTile 与 Provider 结合使用,您的努力将受益匪浅。

    【讨论】:

    • 我不确定如何将每个图块绑定到一个数量。如何在 ListView 中提供绑定列表?
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2011-03-08
    • 2022-06-10
    相关资源
    最近更新 更多