listview_screenshot 1.0.1 listview_screenshot: ^1.0.1 copied to clipboard
Supports long screenshots, suitable for ListView and other scrollable widgets,
listview_screenshot #
flutter针对ListView等滚动视图实现长截图,
Getting started #
dart pub add listview_screenshot
Usage #
核心是 WidgetShotRenderRepaintBoundary.screenshot
final GlobalKey _shotKey = GlobalKey();
final ScrollController _scrollController = ScrollController();
child: WidgetShot(
key: _shotKey,
child: ListView.builder(
controller: _scrollController,
// ...
),
),
void onScreenshot() async {
var context = _shotKey.currentContext!;
WidgetShotRenderRepaintBoundary repaintBoundary =
context.findRenderObject() as WidgetShotRenderRepaintBoundary;
Uint8List? pngBytes = await repaintBoundary.screenshotPng( // 或者调用screenshot得到image库的Image对象,
scrollController: _scrollController,
backgroundColor: Colors.white,
workerName: 'imageMergeTransform', // web异步线程合并要生成对应js文件,否则不传,
);
if (pngBytes == null) {
// ... error,
return;
}
// ... save pngBytes to png file,
}
web异步线程合并支持,
imageMergeTransform.dart
下载到flutter项目web目录下,使用如下代码编译出js文件,
生成的js文件名填写到screenshot方法参数workerName,
dart compile js imageMergeTransform.dart -o imageMergeTransform.js -O4
TODO #
- mac HiDPI截不到高清图,
- web端一下一下的卡顿,
- 合并过程异步,
- 发布到pub.dev,
- 全平台支持,
- 提供未编码的图像或png/jpg已编码图像,
- 整页翻页超长截图拼接,