如何使用flutter共享文件

Dav*_*ndy 9 dart flutter

我想知道如何在flutter应用程序中共享文件?

我看到了一些使用Intent和mojo的旧引用,但似乎不再存在.这似乎是我们应该能够以跨平台方式处理的标准功能(显然ios与android之间存在一些差异).

目前共享文件的最佳做法是什么(例如通过电子邮件)?我可以接受的最接近的是UrlLauncher,我可以想象它可以用来为我想要共享的文件启动一个处理程序,但它似乎是一个延伸.

Fed*_*deH 8

我用share_extend有机结合起来path_provider共享的音频文件,它完美的作品。

void share() async {
Directory dir = await getApplicationDocumentsDirectory();
File testFile = new File("${dir.path}/sound.m4a");
if (!await testFile.exists()) {
  await testFile.create(recursive: true);
  testFile.writeAsStringSync("test for share documents file");
}
ShareExtend.share(testFile.path, "file");
Run Code Online (Sandbox Code Playgroud)

}


Eri*_*del 5

目前没有内置的方法来做到这一点.正如上面提到的Seth Ladd,https://github.com/flutter/flutter/issues/7111正在跟踪这一过程.

目前,您必须使用Objective-C或Java编写必要的共享代码,并使用https://flutter.io/platform-services中记录的平台服务模型从您的Dart调用它,并显示在https://中github.com/flutter/flutter/tree/master/examples/hello_services.


bho*_*bar 5

对于希望反向共享或换句话说,让其他应用程序将数据共享到您的 Flutter 应用程序的任何人,请查看https://flutter.io/flutter-for-android/#how-do-i-handle-incoming- Intents-from-external-applications-in-flutter

感谢 Günter Zöchbauer 在 flutter Gitter 频道上!

这是我发现的最接近于向 Flutter 应用程序“共享”某些东西的问题,并且对于这个特定用例似乎没有这样的问题,因此这里有这个答案


Dan*_*iel 5

您可以使用EsysFlutterShare插件。在1.0.0版中,您可以共享任何喜欢的文件,并且可以在iOS和Android上使用。

只需将其放在您的pubspec.yaml中:

dependencies:
  esys_flutter_share: ^1.0.0
Run Code Online (Sandbox Code Playgroud)

导入库:

import 'package:esys_flutter_share/esys_flutter_share.dart';
Run Code Online (Sandbox Code Playgroud)

共享文件:

final ByteData bytes = await rootBundle.load('assets/image1.png');
await Share.file('esys image', 'esys.png', bytes.buffer.asUint8List(), 'image/png');
Run Code Online (Sandbox Code Playgroud)

您需要隐藏标题,文件名,文件字节和mime类型。

  • 它仅适用于资产中的文件吗?例如,如何分享我在“下载”中的图片? (3认同)
  • 您好@LeonardoRignanese,您有共享下载文件的解决方案吗?谢谢... (2认同)

GMa*_*zke 5

Flutter 刚刚接受了好久的 PR,Share 插件现在也可以共享文件了!

前任:

Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture');
Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']);
Run Code Online (Sandbox Code Playgroud)

  • `shareFiles` 方法现已弃用,现在使用 `shareXFiles` 。例如:`await Share.shareXFiles([XFile(yourPath)]);`。 (2认同)

are*_*ser -2

对于仍然发现这个问题的任何人,您现在可以使用共享插件分享一些内容: https: //pub.dartlang.org/packages/share

编辑:该插件仅支持文本/链接共享,不足以直接共享文件。问题https://github.com/flutter/flutter/issues/16743https://github.com/flutter/flutter/issues/19607直接在 flutter 中跟踪文件共享。

  • 这并不能回答问题,OP专门询问了有关共享文件的问题,而该插件仅支持共享文本。 (14认同)