我想知道如何在flutter应用程序中共享文件?
我看到了一些使用Intent和mojo的旧引用,但似乎不再存在.这似乎是我们应该能够以跨平台方式处理的标准功能(显然ios与android之间存在一些差异).
目前共享文件的最佳做法是什么(例如通过电子邮件)?我可以接受的最接近的是UrlLauncher,我可以想象它可以用来为我想要共享的文件启动一个处理程序,但它似乎是一个延伸.
我用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)
}
目前没有内置的方法来做到这一点.正如上面提到的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.
对于希望反向共享或换句话说,让其他应用程序将数据共享到您的 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 应用程序“共享”某些东西的问题,并且对于这个特定用例似乎没有这样的问题,因此这里有这个答案
您可以使用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类型。
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)
are*_*ser -2
对于仍然发现这个问题的任何人,您现在可以使用共享插件分享一些内容: https: //pub.dartlang.org/packages/share
编辑:该插件仅支持文本/链接共享,不足以直接共享文件。问题https://github.com/flutter/flutter/issues/16743和https://github.com/flutter/flutter/issues/19607直接在 flutter 中跟踪文件共享。