如何使用 flutter 共享文件
How to share a file using flutter
我想知道如何在 flutter 应用程序中共享文件?
我看到一些关于将 Intents 与 mojo 结合使用的旧参考资料,但似乎不再存在。这似乎是我们应该能够以跨平台方式处理的标准功能(显然 ios 到 android 之间存在一些差异)。
当前共享文件(例如通过电子邮件)的最佳做法是什么?我能做的最接近的事情是 UrlLauncher,我可以想象用它来启动我想要共享的文件的处理程序,但这似乎有点牵强。
目前没有内置方法可以执行此操作。正如 Seth Ladd 上面提到的,https://github.com/flutter/flutter/issues/7111 正在跟踪使这更容易。
目前,您必须在 Objective-C 或 Java 中编写必要的共享代码,并使用 https://flutter.io/platform-services and shown in https://github.com/flutter/flutter/tree/master/examples/hello_services 中记录的平台服务模型从 Dart 中调用它。
对于仍然发现这个问题的任何人,您现在可以使用分享插件分享一些东西:https://pub.dartlang.org/packages/share
编辑:此插件仅支持 text/link 共享,不足以直接共享文件。问题 https://github.com/flutter/flutter/issues/16743 and https://github.com/flutter/flutter/issues/19607 直接在 flutter 中跟踪文件共享。
对于希望反向共享的任何人,或者换句话说,让其他应用程序将数据共享到您的 flutter 应用程序,看看https://flutter.io/flutter-for-android/#how-do-i-handle-incoming-intents-from-external-applications-in-flutter。
感谢 flutter Gitter 频道上的 Günter Zöchbauer!
这是我发现的最接近 'sharing' flutter 应用程序问题的问题,并且对于这个特定用例似乎没有 SO 问题,因此这里有这个答案
我发布了这条回复,因为接受的答案实际上并没有回答问题。
使用 flutter-share from this github repo 您可以共享文件,只需将其添加为依赖项,将其导入,然后使用命名的构造函数实例化共享 class,如下所示:Share.file(path: <String>, mimeType: ShareType, title: , text: );
where mimeType , title 和 text 是可选的,然后调用 share 就可以了。
对于Android功能齐全,目前正在开发IOS部分以匹配Android部分(目前只有纯文本共享)。
我使用 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");
}
可以使用EsysFlutterShare Plugin。在版本 1.0.0 中,您可以共享任何您喜欢的文件及其在 iOS 和 Android.
上的工作
把它放在你的pubspec.yaml:
dependencies:
esys_flutter_share: ^1.0.0
导入库:
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');
您需要提供标题、文件名、file-bytes 和 mime 类型。
Flutter刚刚接受了很久的PR,Share plugin现在也可以分享文件了!
例如:
Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture');
Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']);
现在,最好的方法是使用share_plus包
List<String> paths = [filePath];
await Share.shareFiles(
paths,
subject: 'subj',
text: 'text',
);
我想知道如何在 flutter 应用程序中共享文件?
我看到一些关于将 Intents 与 mojo 结合使用的旧参考资料,但似乎不再存在。这似乎是我们应该能够以跨平台方式处理的标准功能(显然 ios 到 android 之间存在一些差异)。
当前共享文件(例如通过电子邮件)的最佳做法是什么?我能做的最接近的事情是 UrlLauncher,我可以想象用它来启动我想要共享的文件的处理程序,但这似乎有点牵强。
目前没有内置方法可以执行此操作。正如 Seth Ladd 上面提到的,https://github.com/flutter/flutter/issues/7111 正在跟踪使这更容易。
目前,您必须在 Objective-C 或 Java 中编写必要的共享代码,并使用 https://flutter.io/platform-services and shown in https://github.com/flutter/flutter/tree/master/examples/hello_services 中记录的平台服务模型从 Dart 中调用它。
对于仍然发现这个问题的任何人,您现在可以使用分享插件分享一些东西:https://pub.dartlang.org/packages/share
编辑:此插件仅支持 text/link 共享,不足以直接共享文件。问题 https://github.com/flutter/flutter/issues/16743 and https://github.com/flutter/flutter/issues/19607 直接在 flutter 中跟踪文件共享。
对于希望反向共享的任何人,或者换句话说,让其他应用程序将数据共享到您的 flutter 应用程序,看看https://flutter.io/flutter-for-android/#how-do-i-handle-incoming-intents-from-external-applications-in-flutter。
感谢 flutter Gitter 频道上的 Günter Zöchbauer!
这是我发现的最接近 'sharing' flutter 应用程序问题的问题,并且对于这个特定用例似乎没有 SO 问题,因此这里有这个答案
我发布了这条回复,因为接受的答案实际上并没有回答问题。
使用 flutter-share from this github repo 您可以共享文件,只需将其添加为依赖项,将其导入,然后使用命名的构造函数实例化共享 class,如下所示:Share.file(path: <String>, mimeType: ShareType, title: , text: );
where mimeType , title 和 text 是可选的,然后调用 share 就可以了。
对于Android功能齐全,目前正在开发IOS部分以匹配Android部分(目前只有纯文本共享)。
我使用 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");
}
可以使用EsysFlutterShare Plugin。在版本 1.0.0 中,您可以共享任何您喜欢的文件及其在 iOS 和 Android.
上的工作把它放在你的pubspec.yaml:
dependencies:
esys_flutter_share: ^1.0.0
导入库:
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');
您需要提供标题、文件名、file-bytes 和 mime 类型。
Flutter刚刚接受了很久的PR,Share plugin现在也可以分享文件了!
例如:
Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture');
Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']);
现在,最好的方法是使用share_plus包
List<String> paths = [filePath];
await Share.shareFiles(
paths,
subject: 'subj',
text: 'text',
);