Flutter中如何实现DataRow数量值的独立修改?
解决方案
问题根源是全局变量qty被所有数据行共享,导致修改时全部同步。要实现每行独立控制数量并计算总价,需为每个商品单独维护数量状态:
步骤1:替换全局变量为Map存储单个商品数量
将原来的全局int qty = 1;替换为一个Map,用来绑定每个商品文档ID与对应数量:
Map<String, int> _itemQuantities = {};
步骤2:修改数据行创建逻辑
更新_createRows方法,使用Map中对应商品的数量值,修改时仅更新当前商品的数量:
List<DataRow> _createRows(QuerySnapshot snapshot) { List<DataRow> newList = snapshot.docs.map((DocumentSnapshot document) { Map<String, dynamic> data = document.data()! as Map<String, dynamic>; // 获取当前商品的数量,默认值为1 int currentQty = _itemQuantities[document.id] ?? 1; // 计算当前商品的总价 int total = currentQty * data['Price']; return DataRow( cells: [ DataCell(Text(data['Items'].toString(), style: Defaults.drawerTextBlacknormal)), DataCell(Text(data['Price'].toString(), style: Defaults.drawerTextBlacknormal)), DataCell( TextFormField( initialValue: '$currentQty', keyboardType: TextInputType.number, onChanged: (insertValue) { setState(() { // 更新当前商品对应的数量,解析失败时默认设为1 _itemQuantities[document.id] = int.tryParse(insertValue) ?? 1; }); }, ), showEditIcon: true), DataCell(Text('$total', style: Defaults.drawerTextBlacknormal)), ], onSelectChanged: ((bool? selected) => selected == null ? selected = false : selected = true), ); }).toList(); return newList; }
说明
- 每个商品的数量通过文档ID作为key存储在
_itemQuantities中,实现独立控制 - 使用
?? 1确保新加载的商品默认数量为1,避免空值问题 - 修改数量时仅更新当前商品对应的Map值,不会影响其他行的数量和总价
内容的提问来源于stack exchange,提问作者Uhsie
相关产品推荐
相关产品推荐

