【问题标题】:Flutter how to share image on assets folder?Flutter如何在资产文件夹上共享图像?
【发布时间】:2021-06-25 18:39:32
【问题描述】:

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

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

【问题讨论】:

    标签: image flutter share file-not-found


    【解决方案1】:

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

          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');
    

    【讨论】:

    • 这成功了!天哪,谢谢!我已经在这里呆了很多天了:(。现在它说直接共享不可用。如果你碰巧知道我可以在哪里搜索以找到问题,那将不胜感激。如果没有,无论如何,非常感谢!
    • 没问题很高兴解决它。您能否分享完整的错误消息?
    • 已修复!谢谢你,祝你有美好的一天:)
    • 干杯伙伴 :) !
    • @Muhtar getTemporaryDirectory() 显示错误。 import 有什么我想念的特别之处吗?
    【解决方案2】:

    您面临的问题来自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 的子文件夹以匹配示例,并在您的 pubspec.yaml 中声明它

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

    您可以在official documentation here.找到更多信息

    【讨论】:

    • 该资产在添加 ImageAsset 小部件时有效,但不适用于您发送给我的代码。我做了所有这些,它仍然给了我 assets/images/baws.png: open failed: ENOENT (No such file or directory)
    【解决方案3】:
                          // 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');
    

    }

    【讨论】:

    • 它为我工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多