20

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

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

当前共享文件(例如通过电子邮件)的最佳做法是什么?我能做的最接近的事情是 UrlLauncher,我可以想象用它来为我想要共享的文件启动处理程序,但这似乎有点牵强。

4

8 回答 8

12

您可以使用EsysFlutterShare 插件。在 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');

您需要提供标题、文件名、文件字节和 mime 类型。

于 2019-04-03T06:38:32.023 回答
9

我使用share_extendpath_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");

}

于 2019-02-14T15:40:57.800 回答
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

于 2016-12-15T22:24:36.777 回答
5

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

感谢 Flutter Gitter 频道上的 Günter Zöchbauer!

这是我发现的最接近“分享”某些东西到颤振应用程序的问题,对于这个特定的用例似乎没有 SO 问题,因此这个答案在这里

于 2018-04-25T10:38:35.277 回答
5

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

前任:

Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture');
Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']);
于 2020-08-28T20:10:08.543 回答
2

我发布了这个回复,因为接受的答案实际上并没有回答这个问题。

使用来自这个 github repo 的flutter-share,您可以通过将其添加为依赖项来共享文件,导入它,然后使用命名的构造函数文件实例化 Share 类,如下所示:Share.file(path: <String>, mimeType: ShareType, title: , text: );其中 mimeType、title 和 text 是可选的,然后调用 share on它。

它完全适用于 Android,目前正在开发 IOS 部分以匹配 Android 部分(目前只有纯文本共享)。

于 2018-06-01T17:23:12.773 回答
0

现在,最好的方法是使用share_plus

List<String> paths = [filePath];
await Share.shareFiles(
  paths,
  subject: 'subj',
  text: 'text',
);
于 2022-01-24T15:09:26.653 回答
-2

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

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

于 2018-02-07T17:58:08.273 回答