flutter 保存图片到本地

本文详细介绍在Flutter中实现图片保存的过程,包括如何通过permission_handler插件获取存储权限,以及使用image_gallery_saver插件保存图片到设备画廊的具体代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

f'lutter 图片的保存 分为俩步:

1.开启存储图片权限
开启权限需要用到permission_handler
pubspec 添加
permission_handler: ^3.0.1
下载包就可以了

 

添加开启权限配置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

flutter代码中添加权限开启代码:
@override
void initState() {
super.initState();
var permission = PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
print("permission status is " + permission.toString());
PermissionHandler().requestPermissions(<PermissionGroup>[
PermissionGroup.storage, // 在这里添加需要的权限
]);
}
到了这一步会弹出请求开启权限的弹框,打开权限就可以进行图片保存的操作。
2.进行图片保存
保存图片要用到
image_gallery_saver
pubspec 添加
image_gallery_saver : ^1.1.0
安装完毕 整代码保存图片就可以了:
onPressed: _testSaveImg, 在点击事件中添加保存图片代码
_testSaveImg () async {

print('保存图片88888');
print("_onImageSaveButtonPressed");

  // 这个图片的地址是本地的文件进行测试 要引入,import 'package:flutter/services.dart' show rootBundle;
  ByteData bytes = await rootBundle.load('assets/images/guide3.png');
    final result = await ImageGallerySaver.save(bytes.buffer.asUint8List()); //这个是核心的保存图片的插件
    print(result);   //这个返回值 在保存成功后会返回true
if(result){
Fluttertoast.showToast(msg: '保存成功', fontSize: 14,gravity: ToastGravity.CENTER,timeInSecForIos: 1,textColor: Colors.white,);
}else{
Fluttertoast.showToast(msg: '保存失败', fontSize: 14,gravity: ToastGravity.CENTER,timeInSecForIos: 1,textColor: Colors.white,);
}

}

 

自己整的时候是先保存图片,发现保存没有权限,权限处理权限浪费了点时间。  

转载于:https://www.cnblogs.com/wupeng88/p/10797667.html

要将Flutter中的图片保存本地并分享到QQ,你可以按照以下步骤操作: 1. 将图片保存本地存储,可以使用以下代码: ```dart import 'dart:io'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:image_gallery_saver/image_gallery_saver.dart'; Future<void> saveImageToGallery(BuildContext context, String imageUrl) async { try { // 获取应用程序目录 Directory appDocDir = await getApplicationDocumentsDirectory(); // 获取文件名 String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1); // 组合路径 String filePath = "${appDocDir.path}/$fileName"; // 下载图片 HttpClient httpClient = HttpClient(); HttpClientRequest request = await httpClient.getUrl(Uri.parse(imageUrl)); HttpClientResponse response = await request.close(); Uint8List bytes = await consolidateHttpClientResponseBytes(response); // 保存图片本地 File file = File(filePath); await file.writeAsBytes(bytes); // 保存图片相册 await ImageGallerySaver.saveImage(bytes); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("图片保存相册"), )); } catch (e) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("保存图片失败: $e"), )); } } ``` 2. 调用QQ分享功能,可以使用以下代码: ```dart import 'package:flutter/material.dart'; import 'package:flutter_qq_share/flutter_qq_share.dart'; Future<void> shareImageToQQ(BuildContext context, String imageUrl) async { try { // 获取应用程序目录 Directory appDocDir = await getApplicationDocumentsDirectory(); // 获取文件名 String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1); // 组合路径 String filePath = "${appDocDir.path}/$fileName"; // 下载图片 HttpClient httpClient = HttpClient(); HttpClientRequest request = await httpClient.getUrl(Uri.parse(imageUrl)); HttpClientResponse response = await request.close(); Uint8List bytes = await consolidateHttpClientResponseBytes(response); // 保存图片本地 File file = File(filePath); await file.writeAsBytes(bytes); // 分享图片到QQ await FlutterQQShare.shareImageToQQ(filePath); } catch (e) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("分享图片失败: $e"), )); } } ``` 调用 `saveImageToGallery` 函数可以将图片保存本地保存相册,调用 `shareImageToQQ` 函数可以将图片分享到QQ。你可以根据自己的需求修改和调整这些代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值