You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:48:32