use*_*995 9 sdk android screenshot ios flutter
我们正在构建一个 SDK,一旦它被集成,它就会截取应用程序的屏幕截图。我们能够为原生 Android、原生 iOS、Cordova、IONIC、React Native、Xamarin 平台截取屏幕截图。但是无法在 V2 Flutter 中拍摄快照。在 V1 Flutter 之前,代码运行良好。但是当在 V2 Flutter 上执行相同的本机代码时,返回应用程序的黑色屏幕截图。
这里的问题是,V1 的 FlutterView 使用称为 registrar.view() 的方法对第三方插件公开可用,在 V2 中,此视图现在不公开给任何插件! https://api.flutter.dev/javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html使用 V1 的 FlutterView 我们能够使用 PixelCopy 捕获视图的屏幕截图,我们无法获得V2 的 FlutterView,我们也没有找到任何解决方案来捕获它。
我们尝试了以下方法,但没有成功。有人可以帮我吗?
您可以查看其GitHub上的Screenshoot 包代码是如何执行此操作的。该软件包已更新至 Flutter v2。
该包使用:
GlobalKey。GlobalKey _containerKey = GlobalKey().currentContext?.findRenderObject();RenderRepaintBoundary.RenderRepaintBoundary boundary = findRenderObject as RenderRepaintBoundary;pixelRatio = pixelRatio ?? MediaQuery.of(context).devicePixelRatio;ui.Image image = await boundary.toImage(pixelRatio: pixelRatio ?? 1);请参阅下面的完整代码:
Future<ui.Image?> captureAsUiImage(
{double? pixelRatio: 1,
Duration delay: const Duration(milliseconds: 20)}) {
//Delay is required. See Issue https://github.com/flutter/flutter/issues/22308
return new Future.delayed(delay, () async {
try {
var findRenderObject =
this._containerKey.currentContext?.findRenderObject();
if (findRenderObject == null) {
return null;
}
RenderRepaintBoundary boundary =
findRenderObject as RenderRepaintBoundary;
BuildContext? context = _containerKey.currentContext;
if (pixelRatio == null) {
if (context != null)
pixelRatio = pixelRatio ?? MediaQuery.of(context).devicePixelRatio;
}
ui.Image image = await boundary.toImage(pixelRatio: pixelRatio ?? 1);
return image;
} catch (Exception) {
throw (Exception);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |