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

Flutter PDF中CustomPaint单独无法渲染,需配合其他组件才能显示的问题排查

解决flutter_pdf中CustomPaint单独渲染不显示的问题

我之前也碰到过一模一样的问题,折腾了好一会儿才找到根源,主要是两个点导致的:

1. 没有执行实际的绘制命令

你在CustomPaint的painter回调里,只调用了drawRRect定义了圆角矩形的路径,但flutter_pdf的PdfGraphics需要明确调用填充或描边方法,才能把路径渲染到PDF上。只定义路径相当于画了草稿,没有最终落笔。

在你的代码里,drawRRect之后需要加上fill()(填充图形)或者stroke()(描边图形),根据你的需求选择,也可以两个都加。

2. 布局约束未明确(可选但建议)

单独使用CustomPaint时,PDF渲染器可能无法正确识别它的尺寸占位,虽然你设置了size参数,但用pw.SizedBox包裹一下能确保布局约束生效,避免因为父组件无约束导致的渲染异常。


修改后的buildCustomPaint代码

static pw.Widget buildCustomPaint() {
  final customPaint = pw.CustomPaint(
    size: const PdfPoint(85 * PdfPageFormat.mm, 55 * PdfPageFormat.mm),
    painter: (PdfGraphics canvas, PdfPoint size) {
      canvas
        ..setStrokeColor(PdfColors.black)
        ..setFillColor(PdfColors.lightBlue)
        // 定义圆角矩形路径
        ..drawRRect(
          0,
          0,
          85 * PdfPageFormat.mm,
          55 * PdfPageFormat.mm,
          6,
          6)
        // 执行填充,让浅蓝色背景显示
        ..fill()
        // 执行描边,显示黑色边框
        ..stroke();
    });
  // 用SizedBox包裹,确保尺寸约束生效
  return pw.SizedBox.fromSize(size: customPaint.size, child: customPaint);
}

为什么加BarcodeWidget后就正常?

当你添加BarcodeWidget时,它给页面提供了明确的布局高度和宽度,间接让CustomPaint的尺寸被正确计算;同时Barcode的渲染流程会触发页面的完整绘制周期,可能意外让CustomPaint的路径被执行了,但这只是巧合,核心还是缺少了fill()/stroke()的绘制命令。

现在你单独使用修改后的buildCustomPaint(),应该就能正常渲染出圆角矩形了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:12:31