请问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

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

#7

在ios上我总是报这样的错误 Unhandled Exception: MissingPluginException(No implementation found for method saveFile on channel mastercarl.com/image_saver)。三个都试了都不行,大哥求教啊!网上说flutter clean 可以解决,我试了没用

#8

建议到Flutter仓库issue列表搜索看看,有不少类似问题,部分也给出了解决方法,比如这个:

#9

我按照你的方法设置了但还是没有作用,_mockHandlers这个值一直为空

#10

你再多测试看看,我也大概看了下源码,这个_mockHanders是用来做mock测试的,正常情况下它应该就是空的,真正起作用的是_handlers

@Mr.Wang 应该也碰到了类似问题,不知他是否已经解决

#11

谢谢你哦:sweat_smile:因为我在AppDelegate.m中多定义了一个window,然后才报这个错,我以为没啥用,放那也没事,这行就没有删,至于原因大概是重复定义???