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

Flutter中RiverPod StreamProvider触发重建后PlutoGrid不重绘求助

解决Flutter中PlutoGrid未随RiverPod StreamProvider更新的问题

以下是针对该问题的具体解决建议:

  • 给PlutoGrid添加唯一Key
    Flutter依赖Key判断组件是否需要重建,当数据更新时,给PlutoGrid传入一个随数据变化的Key,强制触发组件重建。修改代码如下:

    PlutoGrid(
      key: ValueKey(data), // 或基于数据长度/哈希生成Key,比如 ValueKey(data.length)
      columns: _columns,
      rows: data.map((e) {
        print('cell');
        return PlutoRow(cells: _toCells(e));
      }).toList(),
    )
    
  • 为PlutoRow设置稳定唯一的ID
    PlutoGrid内部通过row.id追踪行数据,默认ID是随机生成的,每次重建会生成新ID,可能导致组件无法识别新增行。建议使用FireStore文档的ID作为PlutoRow的ID:

    return PlutoRow(
      id: e.id, // 假设e是FireStore文档模型,包含唯一id字段
      cells: _toCells(e)
    );
    
  • 校验_toCells映射逻辑
    确认_toCells方法没有缓存旧数据,确保新数据能正确映射为PlutoCell的value,比如检查是否存在硬编码值或未正确读取新数据字段的情况。

  • 使用PlutoGridController主动更新数据
    如果上述方法无效,可通过控制器主动通知PlutoGrid更新数据:

    1. 初始化控制器:
      final _gridController = PlutoGridController();
      
    2. 传入PlutoGrid并更新数据:
      data: (data) {
        final rows = data.map((e) => PlutoRow(id: e.id, cells: _toCells(e))).toList();
        _gridController.setRows(rows);
        return Container(
          child: PlutoGrid(
            controller: _gridController,
            columns: _columns,
            rows: rows,
          ),
        );
      },
      

内容的提问来源于stack exchange,提问作者Davout

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:21