flutter:保存图片到相册
一,安装第三方库
库地址:
https://pub.dev/packages/image_gallery_saver_plus
编辑pubspec.yaml
dependencies:
flutter:
sdk: flutter
path_provider: ^2.1.5
audioplayers: ^6.4.0
flutter_sound: ^9.26.0
permission_handler: ^11.4.0
file_picker: ^9.2.1
http: ^1.3.0
dio: ^5.8.0+1
fluttertoast: ^8.2.12
shared_preferences: ^2.5.2
image_gallery_saver_plus: ^4.0.1
然后点击 pub get
配置权限:
<!-- 写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
二,代码:
import 'package:dio/io.dart';
import 'package:flutter/material.dart';
import 'package:image_gallery_saver_plus/image_gallery_saver_plus.dart';
import 'package:dio/dio.dart';
import 'dart:typed_data';
class SaveGalleryPage extends StatefulWidget {
final Map arguments;
// 为title设置一个默认参数,这样的跳转该界面时可以不传值。
SaveGalleryPage({super.key, required this.arguments});
@override
State<SaveGalleryPage> createState() => _SaveGalleryPageState();
}
class _SaveGalleryPageState extends State<SaveGalleryPage> {
//函数,下载图片到相册
_saveNetworkImage(String imgUrl,String fileName) async {
Dio dio = Dio();
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client){
client.badCertificateCallback=(cert, host, port){
return true;
};
};
var response = await dio.get(imgUrl,
options: Options(responseType: ResponseType.bytes));
final result = await ImageGallerySaverPlus.saveImage(
Uint8List.fromList(response.data),
quality: 60,
name: fileName);
print(result);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.primaryContainer,
title: Text(widget.arguments["title"]),
),
body: Center(
child:Column(
children: [
ElevatedButton(
onPressed: () async {
String imgUrl = "https://wx1.sinaimg.cn/mw2000/006OBvBvgy1hzueos4e6oj33h03h0u0z.jpg";
String fileName = "000111";
_saveNetworkImage(imgUrl,fileName);
},
child: Row(
mainAxisSize: MainAxisSize.min, // 根据内容调整大小
children: <Widget>[
Icon(Icons.add), // 图标在左侧
SizedBox(width: 10), // 可选:添加一些间隔
Text("下载到相册"), // 文本在右侧
],
),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
//Image.file(File(imageData), width: 600.0, height: 290.0)
],
),
],
),
),
);
}
}
三,测试效果:

浙公网安备 33010602011771号