我想知道如何在flutter app中共享文件?
我看到了一些使用Intent和mojo的旧引用,但似乎不再存在。这似乎是我们应该能够以跨平台方式处理的标准功能(显然ios与android之间存在一些差异)。
目前共享文件的最佳做法是什么(例如通过电子邮件)?我能接受的最接近的是UrlLauncher,我可以想象它可以用来为我想要共享的文件启动一个处理程序,但这似乎是一个延伸。
答案 0 :(得分:5)
目前没有内置方法可以做到这一点。正如上面提到的Seth Ladd,https://github.com/flutter/flutter/issues/7111正在跟踪这一过程。
目前,您必须使用Objective {C或Java编写必要的共享代码,并使用https://flutter.io/platform-services中记录的https://github.com/flutter/flutter/tree/master/examples/hello_services中显示的平台服务模型从Dart中调用它。< / p>
答案 1 :(得分:3)
对于希望 反向分享 的用户,或者换句话说,让其他应用与您的flutter应用分享数据,请查看{ {3}}。
感谢GünterZöchbauer在扑腾的Gitter频道上!
这是我发现的最接近问题的“分享”某个应用程序的问题,对于这个特定用例似乎没有任何问题,因此这里的答案
答案 2 :(得分:2)
对于仍然发现此问题的任何人,您现在可以与共享插件共享内容:https://pub.dartlang.org/packages/share
编辑:此插件仅支持文本/链接共享,这不足以直接共享文件。问题https://github.com/flutter/flutter/issues/16743和https://github.com/flutter/flutter/issues/19607直接在flutter中跟踪文件共享。
答案 3 :(得分:2)
我发布了这个回复,因为接受的答案实际上没有回答这个问题。
使用flutter-share from this github repo您只需将其作为依赖项添加即可共享文件,导入它,然后使用命名的构造函数文件实例化Share类,如下所示:Share.file(path: <String>, mimeType: ShareType, title: , text: );
其中mimeType,title和text是可选的,然后在其上调用share。
它完全适用于Android,IOS部分目前正在开发以匹配Android部分(目前只有plainText共享)。
答案 4 :(得分:2)
您可以使用EsysFlutterShare Plugin。在1.0.0版中,您可以共享任何喜欢的文件,并且可以在iOS和Android上共享文件。
只需将其放在您的pubspec.yaml中:
dependencies:
esys_flutter_share: ^1.0.0
导入lib:
import 'package:esys_flutter_share/esys_flutter_share.dart';
共享文件:
final ByteData bytes = await rootBundle.load('assets/image1.png');
await Share.file('esys image', 'esys.png', bytes.buffer.asUint8List(), 'image/png');
您需要隐藏标题,文件名,文件字节和mime类型。
答案 5 :(得分:0)
我将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");
}
答案 6 :(得分:0)
Flutter刚刚接受了很长时间的PR,Share plugin现在也可以共享文件!
例如:
Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture');
Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']);