zoukankan      html  css  js  c++  java
  • Flutter 使用image_gallery_saver保存图片

    Flutter  使用image_gallery_saver保存图片

    其实我们开发项目app的时候, 你会发现有很多问题, 比如保存图片功能时 ,不仅导入包依赖包: image_gallery_saver 就能解决问题的.

    备注: 图片拖动发大功能(https://www.cnblogs.com/maqingyuan/p/13693303.html)
    废话不多说,先上效果图:

    保存图片功能共分为两步

    第一步: 权限开启问题(permission_handler插件库地址: https://pub.dev/packages/permission_handler )

    • 导包:
    permission_handler: ^3.0.0 #申请储存权限插件
    • 配置权限
    <!-- 开启读写storage权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    权限配置的位置效果图如下:

     第二步: 使用 image_gallery_saver 插件, 插件地址链接:  https://pub.dev/packages/image_gallery_saver

    • 导包
    mage_gallery_saver: ^1.5.0 #图片保存到本地
    • 项目代码引入
    import 'package:image_gallery_saver/image_gallery_saver.dart'; //保存图片插件
    • 案例代码如下
    import 'package:flutter/material.dart';
    import 'dart:io'; //判断ios还是android插件
    import 'package:flutter_drag_scale/flutter_drag_scale.dart'; //图片点击放大插件
    import 'package:image_gallery_saver/image_gallery_saver.dart'; //保存图片插件
    import 'dart:typed_data'; //保存图片插件
    // import '../../utils/http.dart';
    import 'package:permission_handler/permission_handler.dart';
    
    import 'package:dio/dio.dart';
    import 'package:oktoast/oktoast.dart'; //toast插件
    
    
    class OpenImg extends StatefulWidget{
        final String url;
        // final Function onTap;
        const OpenImg({Key key, this.url}):super(key: key);
        @override
        _OpenImgState createState() => _OpenImgState();
    }
    
    class _OpenImgState extends State<OpenImg>{
    
        void initState(){
            super.initState();
            // 检查并请求权限
            var permission = PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
            print("permission status is " + permission.toString());
            PermissionHandler().requestPermissions(<PermissionGroup>[
                PermissionGroup.storage, // 在这里添加需要的权限--储存权限
            ]);
        }
    
        //点击保存图片
        // 需要引入一下库
        // import 'package:image_gallery_saver/image_gallery_saver.dart';
        // import 'dart:typed_data';
    
    void _save() async { var response = await Dio().get("http://pic3.zhimg.com/2d41a1d1ebf37fb699795e78db76b5c2.jpg", options: Options(responseType: ResponseType.bytes)); final result = await ImageGallerySaver.saveImage( Uint8List.fromList(response.data) ); // 判断ios还是android,故需要引入 import 'dart:io'; if(Platform.isIOS){ if(result){ showToast('成功保存到相册中'); }else{ showToast('保存失败'); } }else{ if(result != null){ showToast('成功保存到相册中'); }else{ showToast('保存失败'); } } } @override Widget build(BuildContext context){ return Scaffold( appBar: AppBar( backgroundColor: Colors.black, elevation: 0.0, //导航栏阴影 actions: [ PopupMenuButton( child: Icon(Icons.more_vert), itemBuilder: (BuildContext context){ return
    <PopupMenuItem<String>>[ PopupMenuItem<String>(child: Text("下载图片"), value: "download",), PopupMenuItem<String>(child: Text("分享图片"), value: "share",), ]; }, onSelected: (String action) { switch (action) { case "download": _save(); break; case "share": print("分享图片"); break; } }, onCanceled: () { print("onCanceled"); } ) ], ), body: DragScaleContainer( doubleTapStillScale: true, child: Container( color: Colors.black, height: MediaQuery.of(context).size.height, child: Image.network(this.widget.url, fit: BoxFit.contain), ), ) ); } }

    注意以上代码的备注说明,不然会有报错的可能性.

    谢谢大家!!!有问题评论区见

  • 相关阅读:
    AutoCAD 相关的在线多级同步的一些资料收集 beta
    FUSLOGVW 工具来报告错误的具体信息
    [转]阿朱:帮助过我的那些书和人
    Accelerated C++ 习题答案
    一些帮助理解的短视频
    Visual Studio 控制台程序无法输出中文
    [翻译]ObjectArx.Net下Invoke非托管的函数
    LINQ&EF任我行(二)LinQ to Object (转)
    软件编程中的21条法则[转]
    VAssistX的VA Snippet Editor使用小讲 [转]
  • 原文地址:https://www.cnblogs.com/maqingyuan/p/13696414.html
Copyright © 2011-2022 走看看