#flutter #listview #flutter-provider
#flutter #listview #flutter-provider
Вопрос:
Проблема в том, что при нажатии на плитку списка количество увеличивается для всех плиток списка.
У меня есть виджет без состояния, который имеет этот метод сборки :
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;
}
}
Я хочу нажать на плитку списка и увеличить только ее значение, которое отображается в конце, но не в других.
Я использую несколько поставщиков в главном файле приложения.
Ответ №1:
Поставщику необходимо отслеживать количество по продуктам. Ваш поставщик отслеживает количество как единый int, поэтому результат, который вы видите, соответствует вашему коду.
Количество должно быть списком. Вы также можете установить начальное значение.
Затем
incrementQuantity(int index) {
increment quantity[index] here
}
И
get quantity(int index){
return quantity[index]
}
Кстати, на мой взгляд, ваши усилия значительно выиграли бы, если бы вы исследовали использование ListTile с Provider.
Комментарии:
1. Я не уверен, как я могу привязать каждую плитку к количеству. Как я могу предоставить список привязок в ListView?