IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> flutter 下载 项目资源图片 和 截屏 -> 正文阅读

[移动开发]flutter 下载 项目资源图片 和 截屏

flutter 下载 项目资源图片 和截屏

最近开发项目遇到 一个需求 下载一张项目内的图片,开始是截屏,后来要求直接下载图片。
先在yaml 文件中引用

  permission_handler: ^9.2.0
  permission_handler_platform_interface: ^3.7.0
    # 文件保存插件
  image_gallery_saver: ^1.7.1

在 清单文件加权限

 <!--允许程序设置内置sd卡的读写权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

首先申请权限

 Map<Permission, PermissionStatus> statuses = await [
      Permission.storage,
    ].request();
    final info = statuses[Permission.storage].toString();

如果是 下载资源文件

///  localurl  assert 路径
  ///  fileName  文件名称
  static void  saveAassetsImage(String localurl,String fileName) async {
    var bytes = await rootBundle.load(localurl);
    ByteBuffer buf =  bytes.buffer;
    Uint8List picBytes = buf.asUint8List();
    final result = await ImageGallerySaver.saveImage(picBytes,
        quality: 100, name: fileName);
    if (result['isSuccess']) {
      print('保存成功');
    } else {
      print('保存失败');
    }
  }

如果是 截屏 需要用 RepaintBoundary +key 的方式

      RepaintBoundary(
         key: globalKey,//   通过这个key  确定 截图范围
           child: Image(
              image: const AssetImage('assets/images/111.png'),
              width: 200,
              height: 150,
            ),
            ),

截屏方法如下

 RenderRepaintBoundary boundary =
    globalKey.currentContext.findRenderObject();
    ui.Image image = await boundary.toImage();
    ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    Uint8List picBytes = byteData!.buffer.asUint8List();
    final result = await ImageGallerySaver.saveImage(picBytes,
        quality: quali, name: nameString);
    if (result['isSuccess']) {
      if (bools) {
        print('保存成功');
      }
    } else {
        print('保存失败');
    }

我抽取成一个方法类

///  refix_name_page.dart
///  cmzjapp
///
///  Created by 介星星 on 2022/1/21.
///  Copyright ? 2022年 cmzjapp. All rights reserved.
///
///  @Description  图片的保存  和   分享
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:permission_handler/permission_handler.dart';


class ImageSaveUtils {

  ///  保存图片需要动态申请权限   requestPermission();
  static requestPermission() async {
    Map<Permission, PermissionStatus> statuses = await [
      Permission.storage,
    ].request();
    final info = statuses[Permission.storage].toString();
    print(info);
  }

  static Future<void> save(globalKey, nameString,
      {int quali = 100, bool bools = true}) async {
    RenderRepaintBoundary boundary =
    globalKey.currentContext.findRenderObject();
    ui.Image image = await boundary.toImage();
    ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    Uint8List picBytes = byteData!.buffer.asUint8List();
    final result = await ImageGallerySaver.saveImage(picBytes,
        quality: quali, name: nameString);
    if (result['isSuccess']) {
      if (bools) {
        print('保存成功');
      }
    } else {
        print('保存失败');
    }
  }




  ///  localurl  assert 路径
  ///  fileName  文件名称
  static void  saveAassetsImage(String localurl,String fileName) async {
    var bytes = await rootBundle.load(localurl);
    ByteBuffer buf =  bytes.buffer;
    Uint8List picBytes = buf.asUint8List();
    final result = await ImageGallerySaver.saveImage(picBytes,
        quality: 100, name: fileName);
    if (result['isSuccess']) {
      print('保存成功');
    } else {
      print('保存失败');
    }
  }


}


具体调用
截屏使用

ImageSaveUtils.requestPermission();    先申请权限

 int current =  DateTime.now().millisecondsSinceEpoch;
      ImageSaveUtils.save(globalKey, "mn_" + current.toString());

下载assert 图片

ImageSaveUtils.requestPermission();    先申请权限

 ImageSaveUtils.saveAassetsImage('assets/images/222.png', 'xiaomao');   下载

下载地址 https://download.csdn.net/download/bu_wangchuxin/85213604 (刚刚上传 估计几天就可以下载)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:52:02  更:2022-04-26 11:53:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:48:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码