#flutter #shopping-cart #provider
#flutter #корзина покупок #поставщик
Вопрос:
У меня есть приложение для покупок, которое хочет создать список пожеланий, я многое сделал правильно, просто когда я хочу проверить один продукт, все продукты проверены, а также когда я хочу увеличить или уменьшить количество продукта, все продукты меняются, как показано на рисунке ниже, мой код :
Поставщик :
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),
),
],
);
}),
результат :
Я предполагаю, что для этого нужен список для счетчика, но не знаю, как это сделать
есть ли какие-либо предложения?
Ответ №1:
Это класс notifier:
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);
},
),
);
},
);
},
),
),
);
}
}