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

如何用screenshot等库将Widget截图保存为500x500自定义尺寸?

调整Widget截图尺寸为500x500的解决方案

要把Widget截图固定保存为500x500尺寸,你可以通过修改截图前的Widget约束和截图参数来实现,以下是调整后的完整代码:

Future<void> _takeScreenshot({required BuildContext context, required Widget shareWidget}) async {
  final box = context.findRenderObject() as RenderBox;

  // 给目标Widget添加固定尺寸约束,确保渲染为500x500
  final constrainedWidget = SizedBox(
    width: 500,
    height: 500,
    child: shareWidget,
  );

  await ScreenshotController()
      .captureFromWidget(
        constrainedWidget,
        // 强制截图输出尺寸为500x500
        size: const Size(500, 500),
      )
      .then((Uint8List bytes) async {
    final Directory dir = await getApplicationSupportDirectory();
    final String ts = DateTime.now().millisecondsSinceEpoch.toString();
    final String filePath = '${dir.path}/$ts.png';
    await XFile.fromData(bytes).saveTo(filePath);
    await Share.shareXFiles(
      [XFile(filePath)],
      sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size,
    );
  });
}

关键修改说明:

  • 添加SizedBox约束:如果原shareWidget是自适应尺寸的,直接截图会按它的实际渲染大小输出,套上SizedBox可以强制它在500x500范围内布局,避免内容溢出或尺寸不符。
  • 指定captureFromWidget的size参数:这个参数直接控制最终生成图片的像素尺寸,确保输出的截图严格是500x500,即使Widget内部有超出约束的内容,也会按该尺寸裁剪或缩放。

如果你的shareWidget本身已经是固定500x500尺寸,也可以跳过SizedBox这一步,直接在captureFromWidget里指定size参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:01