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),
),
],
);
}),
结果 :
我想它需要一个计数器列表,但不知道该怎么做
有什么建议吗?
解决方案
这是通知程序类:
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);
},
),
);
},
);
},
),
),
);
}
}
推荐阅读
- reactjs - 你不应该在外面使用
- 从不同的文件夹导入 - python - 使用字典元组键的最后两个元素求和
- python - Jupyter 在 VSCode 中运行错误的单元格
- ios - 我们如何在 Swift 中使用 firebase 发送位置信息
- python - 重定向快捷方式不起作用,不在浏览器上重定向我
- java - 后端从数据库中获取所有数据但返回一个结果
- numpy - “建立强混合整数规划公式的几何方法”中的定理 1
- python - flask-admin 自定义表单操作并启动后台进程
- c - 将可变数量的参数传递给 C 中的函数
- javascript - 如何在使用位置时将表列 A 中的 div 放在其余列的顶部:React 应用程序中的粘性