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)
                ],
              ),
            ],
          ),

        ),
      );
  }
}

 

三,测试效果:

 

posted @ 2025-04-04 13:12  刘宏缔的架构森林  阅读(393)  评论(0)    收藏  举报