以前は share
プラグインで実装していた(と思われる)文章・画像ファイルなどの共有機能(Twitter・Slack・Google ドライブなどへの共有)ですが、現在は share_plus
で置き換えられているようですので、メモとして残しておきます。
試したバージョン
- Flutter 2.5.3
- share_plus 3.0.4
- Android 10
- iOS 14.8.1
準備
-
pubspec.yaml
(関連部分)
share_plus: ^3.0.4
2022/11/3 追記:
バージョン 5.0.0 以降では Web 対応のアプリとして作成しない場合でもshare_plus_web
が必要なようです(同時に読み込まないとエラーに)。
-
pubspec.yaml
(関連部分)
share_plus: ^6.2.0
share_plus_web: ^3.1.0
コード例
Example そのままです。
なお、実際にはこちらの個人開発&個人利用アプリの中で使っています。
- hmatsu47 / maptool(GitHub)
import 'package:share_plus/share_plus.dart';
文章のみ共有する場合
void _shareText(String text, String subject) async {
await Share.share(text,
subject: subject);
}
subject
はメールを送信する場合に標題として使われるようです(オプション)。
なお、iPad で利用する場合のみ、sharePositionOrigin
オプションを指定して表示することができます。
void _shareText(BuildContext context, String text, String subject) async {
final box = context.findRenderObject() as RenderBox?;
await Share.share(text,
subject: subject,
sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size);
}
画像ファイルを添付・共有する場合
画像ファイルのパスをString
のList
で指定します(複数添付可)。
void _shareImages(List<String> imagePaths, String text, String subject) async {
await Share.shareFiles(imagePaths, text: text, subject: subject);
}
こちらのケースではtext
・subject
ともオプションです。また、iPad のみsharePositionOrigin
オプションを指定することができます(例示は省略)。
2022/11/3 追記:
バージョン 4.5.0 以降ではshareFiles()
が非推奨になり、代わりにshareXFiles()
が導入されました。
最初の引数は画像ファイルのパス(String
)ではなくXFile
のList
で指定する形に変わりました。
void _shareImages(List<XFile> files, String text, String subject) async {
await Share.shareFiles(files, text: text, subject: subject);
}
画面表示例
Android の場合
こんな感じで共有先の選択画面が表示されます。
iOS の場合
見た目は異なりますが、共有先の選択画面が表示されます。
Twitter を選択するとこのようになります。
注意点
Readme に記載がありますが、モバイル(Android・iOS)では Facebook への共有ができないようです。