Flutter 如何在资产文件夹中共享图像?

Flutter how to share image on assets folder?

使用此代码,我不断收到错误“ENOENT(没有这样的文件或目录),null,null,null)”。如何共享资产文件夹中的文件?

Directory directory = await getApplicationDocumentsDirectory();
    Share.shareFiles(['${directory.path}/baws.png'], text: 'Great picture');

您面临的问题来自方法getApplicationDocumentsDirectory();,它没有为您提供正确的路径。

它给你应用程序存储数据的隐藏目录的路径。

您可能希望使用如下内容更新您的代码:

// old code
Share.shareFiles(['${directory.path}/baws.png'], text: 'Great picture');


// new one
Share.shareFiles(['assets/images/baws.png'], text: 'Great picture');

不要忘记将您的 'baws.png' 放在名为 assets 的文件夹中,其中包含一个名为 image 的子文件夹以匹配示例,并在您的 [=14= 中声明它]

文件夹 assets 需要位于项目目录的根目录下。

您可以在 official documentation here.

上找到更多信息

首先将图像作为字节获取并复制到临时文件。

      final bytes = await rootBundle.load('assets/image.jpg');
      final list = bytes.buffer.asUint8List();

      final tempDir = await getTemporaryDirectory();
      final file = await File('${tempDir.path}/image.jpg').create();
      file.writeAsBytesSync(list);

然后用share包分享,应该可以了;

Share.shareFiles(['${file.path}'], text: 'Great picture');
                      // import 'package:flutter/services.dart';
                      // import 'package:path_provider/path_provider.dart';
                      // import 'package:share_plus/share_plus.dart';
                      // import 'dart:io'; 
                      // share_plus: any
                      // path_provider: any
shareFile(){
                      ByteData imagebyte = await rootBundle
                          .load('assets/images/kissing_image_real.png');
                      final temp = await getTemporaryDirectory();
                      final path = '${temp.path}/image1.jpg';
                      File(path).writeAsBytesSync(imagebyte.buffer.asUint8List());
                      await Share.shareFiles([path], text: 'Image Shared');

}