请问Flutter+Dart怎么保存图片到手机里


#1

做一个功能,把网络请求到的二维码保存到手机里,问下大佬们怎么实现~


#2

说下我的实现方式:使用http库获取图片,图片数据使用image库处理,文件保存路径则由flutter插件path_provider获得,具体如下:

依赖:

  path: ^1.6.2
  http: ^0.12.0+1
  path_provider: ^0.5.0+1
  image: ^2.0.7

导入:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:path/path.dart' as path;
import 'package:image/image.dart' as img;
import 'package:path_provider/path_provider.dart';

主要代码:

  _fetchImage() async {
    final url = 'https://raw.githubusercontent.com/dart-lang/logos/master/dart/logo/64.png';
    final res = await http.get(url);
    final image = img.decodeImage(res.bodyBytes);

    Directory appDocDir = await getApplicationDocumentsDirectory();
    Directory tempDir = await getTemporaryDirectory();
    String tempPath = tempDir.path; // 临时文件夹
    String appDocPath = appDocDir.path; // 应用文件夹

    final imageFile = File(path.join(appDocPath, 'dart.png')); // 保存在应用文件夹内
    await imageFile.writeAsBytes(img.encodePng(image)); // 需要使用与图片格式对应的encode方法

    setState(() {
      _imageFile = imageFile;
    });

    // 打印各种属性以验证文件保存成功
    // print(imageFile.path);
    // print(imageFile.statSync());
  }

#3

谢谢老哥,我试试。


#4

没有成功哎…刚弄这个flutter,不太熟悉,百度了好多,看到还要发广播告诉手机更新相册,老哥能详细点嘛,万分感谢…


#5

OK,原来你要直接保存到相册中啊,发现有多个插件可以直接实现:


#6

有用了,插件这方面很少去看,感谢大哥~~~~~