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

PlutoGrid动态生成List<PlutoRow>数据无法显示问题求助

排查PlutoGrid动态生成数据源不显示的问题

以下是几个核心排查方向和解决方案:

  • 确保生成新的列表实例
    PlutoGrid依赖状态变更触发重绘,如果handleDataSrc只是修改原有列表的内容(比如clear()+add()),而非返回全新的List<PlutoRow>实例,即使调用setState也可能不触发UI更新。正确的做法是通过map().toList()、List.from()或spread操作符生成新列表:

    List<PlutoRow> handleDataSrc(List<Map<String, dynamic>> rawData) {
      return rawData.map((item) {
        return PlutoRow(cells: {
          'id': PlutoCell(value: item['id']),
          'name': PlutoCell(value: item['name']),
        });
      }).toList();
    }
    
    // 赋值时必须更新变量引用
    setState(() {
      gridRows = handleDataSrc(rawData);
    });
    
  • 校验Cell值与Column类型匹配
    即使键名完全匹配,若PlutoCell的value类型和对应PlutoColumn的type不兼容,也会导致数据不渲染。比如列定义为PlutoColumnType.text(),但cell的value是数字类型,需确保类型一致:

    // 列定义示例
    PlutoColumn(
      title: 'ID',
      field: 'id',
      type: PlutoColumnType.number(), // 对应cell的value必须是数字类型
    )
    
  • 检查状态更新时机
    如果handleDataSrc是处理异步获取的数据(比如接口请求),需确保数据处理完成后再赋值给Grid的数据源。在initState中处理异步数据时,要包裹在setState或Future.microtask中:

    @override
    void initState() {
      super.initState();
      Future.microtask(() async {
        final rawData = await fetchData();
        setState(() {
          gridRows = handleDataSrc(rawData);
        });
      });
    }
    
  • 避免重复的Row Key
    若手动指定了PlutoRow的key参数,必须保证每个row的key唯一。重复的key会导致Grid渲染异常,建议使用数据中唯一标识字段作为key:

    PlutoRow(
      key: ValueKey(item['id']), // 用唯一ID作为key
      cells: {...},
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:22:37