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
相关产品推荐
相关产品推荐

