对Flutter中所有内容(包括屏外)进行截图

问题描述 投票:0回答:1

我正在使用 Flutter 为 Windows 制作软件。我已经完成了所有操作,现在正处于最后一步,我需要截取大小为 5000x5000 的 SizedBox 内容的屏幕截图并将其转换为 PNG。问题在于,即使在窗口边缘记录了溢出,屏幕截图始终是软件窗口的大小。我也需要记录窗口外内容的屏幕截图(显然没有溢出指示器)。而且我没有使用 Listview,这些是特定的固定小部件,其中包含从本地数据库接收的数据。

我的第一次尝试是使用屏幕截图包,但我遇到了窗口限制的问题。我尝试通过控制器捕获页面本身;还有“captureFromWidget”,在上一页上调用,并将整个页面视为“captureFromWidget”中的小部件。我想到的解决方案是将窗口大小调整为 5000x5000,对内容进行屏幕截图,然后将窗口缩小到正常大小。

为了调整大小,我使用了“desktop_window”包,不幸的是它只能将窗口大小调整为显示器的最大尺寸。因此,我尝试了不同的包“bitsdojo_window”,再次出现同样的问题,它调整的最大大小是我的显示器的大小,没有达到我需要的 5000x5000。

我还尝试使用两个 Scrollbar 包裹的两个 SingleChildScrollview(一个水平一个垂直)来包裹 5000x5000 的内容。它只能浏览内容,但受限于窗口大小,不能截图。

-

所以我尝试了Flutter自己的RenderRepaintBoundary,这基本上就是“截图”包的工作原理,但不幸的是,同样的问题,受到窗口大小的限制。

最终,我所有的尝试都导致屏幕截图仅限于窗口。有什么办法可以超越窗口限制进行截图吗?是否有一个小部件可以渲染并考虑在“屏幕截图”或“RenderRepaintBoundary”中注册 5000x5000?我尝试了 OverflowBox,但也不起作用。

-

我需要这个软件至少在1366x768的计算机上工作,所以我不能在窗口内进行屏幕截图限制,因为我需要捕获5000x5000,而不仅仅是1366x768。

flutter screenshot window-resize off-screen
1个回答
0
投票

我简直不敢相信,在被这个问题困扰了几天之后,我发现了解决方案,而且非常简单。我做了一些 Widget 顺序测试,发现 RenderRepaintBoundary 或 Screenshot 需要位于 SingleChildScrollView 内部,而不是像我所做的那样之前。只是。代码如下所示:

return Scaffold(
    body: Scrollbar(
      controller: vertical,
      thumbVisibility: true,
      trackVisibility: true,
      child: Scrollbar(
          controller: horizontal,
          thumbVisibility: true,
          trackVisibility: true,
          notificationPredicate: (notif) => notif.depth == 1,
          child: SingleChildScrollView(
              controller: vertical,
              scrollDirection: Axis.vertical,
              child: SingleChildScrollView(
                  scrollDirection: Axis.horizontal,
                  controller: horizontal,
                  child: Screenshot(
                    controller: screenshotController,
                    child: SizedBox(...

我也要感谢pskink,虽然遗憾的是我之前没有看到他的回答,但解决方案也可以在那里找到!

© www.soinside.com 2019 - 2024. All rights reserved.