Flutter生成多页PDF遇异常:SQL查询结果分页问题求助
解决Flutter PDF生成中多页表格的分页异常问题
问题出在你把整个Table嵌套在了Column里——Column是无高度限制的容器,会强制Table一次性渲染所有行,导致MultiPage无法正确分割内容,最终触发“超过20页”的异常。
修正方案
直接移除外层的Column,并利用Table的header参数实现每页重复表头,这样MultiPage就能自动处理表格的分页逻辑:
pdf.addPage(pw.MultiPage( pageFormat: PdfPageFormat.a4, build: (pw.Context context) { return <pw.Widget>[ pw.Table( // 设置表头,每页都会重复显示 header: (context) => pw.TableRow( children: data[0].keys.map((e) => pw.Text(e)).toList(), ), children: data.map((e) { return pw.TableRow( children: e.values.map((v) => pw.Text(v)).toList(), ); }).toList(), ) ]; } )); return pdf.save();
关键说明
- 移除Column:
MultiPage的build方法返回的widget列表本身支持自动分页,不需要用Column包裹,否则会破坏分页逻辑。 - 使用Table.header:原来的写法把表头作为表格的第一行,分页后后面的页面会丢失表头,用
header参数可以让表头在每一页顶部重复显示,提升PDF可读性。 - 避免强制渲染全部内容:去掉
Column后,Table会配合MultiPage按需渲染行,不会一次性生成所有行导致页数超限。
如果需要添加标题等其他内容,直接把它们放在build返回的列表里即可,比如:
return <pw.Widget>[ pw.Text('查询结果报告', style: pw.TextStyle(fontSize: 18, fontWeight: pw.FontWeight.bold)), pw.SizedBox(height: 10), // 表格部分 pw.Table(...), ];
内容的提问来源于stack exchange,提问作者Srikanth S
相关产品推荐
相关产品推荐

