概述
Flutter生成圖片相當(dāng)于是對(duì)某一個(gè)Widget進(jìn)行截圖保存
保存圖片需要獲取文件存儲(chǔ)權(quán)限
引入插件permission_handler(權(quán)限控制插件)鉴扫、image_gallery_saver(文件保存插件)設(shè)置修改權(quán)限文件
引入插件后席镀,需要對(duì)ios和安卓分別設(shè)置權(quán)限
安卓修改文件android/app/src/main/AndroidManifest.xml
烘豌,添加如下代碼
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
ios修改文件ios/Runner/Info.plist
剖效,添加如下代碼
<key>NSPhotoLibraryAddUsageDescription</key>
<string>請(qǐng)?jiān)试SAPP保存圖片到相冊(cè)</string>
3.flutter代碼中使用
GlobalKey globalKey = GlobalKey();
........
RepaintBoundary(
key: globalKey,
child: Container(
...........
),
)
//觸發(fā)保存
onTap: () async {
//檢查是否有存儲(chǔ)權(quán)限
var status = await Permission.storage.status;
if (!status.isGranted) {
status = await Permission.storage.request();
print(status);
return;
}
BuildContext buildContext = globalKey.currentContext;
if (null != buildContext){
RenderRepaintBoundary boundary = buildContext.findRenderObject();
ui.Image image = await boundary.toImage();
ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
final result = await ImageGallerySaver.saveImage(byteData.buffer.asUint8List());
MessageToast.succ(context, '海報(bào)已保存到相冊(cè)');
}
Navigator.of(context).pop();
},