如何从Flutter应用程序共享图像文件到其他应用程序

jyztefdp  于 2022-11-17  发布在  Flutter
关注(0)|答案(3)|浏览(334)

我有一个应用程序,该应用程序显示一个图像给用户。该图像我保存在MySQL数据库中作为一个链接和文件夹中的图像到服务器。现在我试图让用户可以共享该图像到其他应用程序,如WhatsApp或Facebook从我的应用程序。
我使用share_plus 3.0.5软件包来实现:
share_plus 3.0.5

await Share.shareFiles([//////////////////here/////////////], text: 'Image Shared');

通过以下代码获取图像:

Future MakeShare() async {
var response = await http.get(
    Uri.parse("https://*********/ImageMakeShare.php?ID=" + widget.IDS.toString()),
    headers: {"Accept": "application/json"});

setState(() {

  var convertDataToJson = json.decode(response.body);
  dataImage = convertDataToJson['result'];
  if (dataImage != null) {

    imageMaine = dataImage[0]['image'];

}}); }

我试着让它像那样

await Share.shareFiles([imageMaine ], text: 'Image Shared');

但我得到错误:

E/flutter (10763): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(https:/*******0ee2e.png (No such file or directory), null, null, null)

现在我需要知道我如何才能使用户可以共享该图像到其他应用程序。
有人能帮我吗?

q5lcpyga

q5lcpyga1#

您可以使用我的库**app_utils**,它允许您使用提供的参数启动Android和iOS。您可以将您的图像URI作为参数传递给其他应用程序。
例如
等待应用实用程序。启动应用程序(Android软件包:“com.whatsapp”,iosUrl方案:“whatsapp://",参数:{“图像URL”:“https://image.png“});

iswrvxsc

iswrvxsc2#

在此方法中传递用户名和网络图像URL,它将返回XFile。

fileFromImageUrl(String url, String userName) async {
        final response = await http.get(
          Uri.parse(url),
        );
    
        final documentDirectory = await getApplicationDocumentsDirectory();
    
        var randomNumber = Random();
    
        final file = File(
          join(
            documentDirectory.path,
            "${randomNumber.nextInt(100)}_$userName.png",
          ),
        );
    
        file.writeAsBytesSync(response.bodyBytes);
    
        return XFile(file.path);
      }

像这样调用该方法,

XFile fileForShare = await fileFromImageUrl(
                      fileURL, empName);

Share.shareXFiles(
                    [fileForShare],
                    text: widget.postData.title.toString(),
                 );
xggvc2p6

xggvc2p63#

documentationshareFiles()函数中可以看出,它需要一个String列表,指向设备上的一个本地路径。您传递的是一个URI(imageMaine),它不是一个本地路径,所以插件抛出异常。
如果你想分享一个链接,那么你应该使用share()函数。如果你想分享一个文件,你应该先获取你的文件,然后用shareFiles函数发送它:

final url = Uri.parse("myLink");
  final response = await http.get(url);
  await File('/yourPath/myItem.png').writeAsBytes(response.bodyBytes);

  await Share.shareFiles(['/yourPath/myItem.png'], text: 'Image Shared');

相关问题