Flutterでのshare機能の実装について

※この記事は「Dart Advent Calendar 2018」の１５日目の記事になります。

# 注意

2022年1月 追記
この記事で紹介しているshareプラグインは非推奨になっています。
> This plugin has been replaced by the Flutter Community Plus Plugins version, share_plus. No further updates are planned to this plugin, and we encourage all users to migrate to the Plus version.

出典:https://pub.dev/packages/share#deprecation-notice



#概要
この記事はFlutterにおいて、share機能を実装するための解説記事になります。
share機能とは次の画像の様に、アプリに登録してある情報を他のアプリに対して転記する機能になります。
![share_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/122004/06f97aac-3ec7-ac18-3d20-409920a70f3b.jpeg)


#実装方法
大まかなステップは次の通りになります。
１. shareプラグインを追加する。
2. コード内にShare.share()を追加し、共有したい内容を記載する。

##shareプラグインを追加する。
共有機能を追加するために[Shareプラグイン](https://pub.dartlang.org/packages/share)を追加します。

```pubspec.yaml
  dependencies:
    flutter:
      sdk: flutter
      ・・・
    share: ^0.5.3
```

##import文の追記する
「main.dart」の文頭に次の一文を追記します。

```main.dart
import 'package:share/share.dart';
```

##コード内にShare.share()を追記する

```main.dart
IconButton(
 icon: Icon(Icons.share),
  onPressed: () {
   if (_formKey.currentState.validate()) {
      _formKey.currentState.save();
        Share.share(
        "シェアしたい内容を記入"
        );
   }
 },
)
```

#サンプル
今回紹介したshare機能を使用して、入力した内容を他のアプリに共有する簡単なアプリを作成しました。

```
import 'package:flutter/material.dart';
import 'package:share/share.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Demo share'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  String _text = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SafeArea(
         child: Form(
           key: _formKey,
           child: ListView(
             padding: const EdgeInsets.all(20.0),
             children: <Widget>[

            TextFormField(
              decoration: const InputDecoration(
                hintText: 'シェアしたい内容',
                labelText: 'シェアしたい内容',
              ),
              onSaved: (String value) {
                _text = value;
              },

            ),
            IconButton(
              icon: Icon(Icons.share),
              onPressed: () {
                if (_formKey.currentState.validate()) {
                  _formKey.currentState.save();
                  Share.share(
                      _text
                  );
                }
              }
            ),
          ],
        ),
        ),
      ),
    );
  }
}
```

実行すると、次の画像の様に入力した内容を他のアプリに共有することができます。

![画面遷移.png](https://qiita-image-store.s3.amazonaws.com/0/122004/1f05f4bb-00a1-d71e-f5e9-4f83cb0a7d9a.png)

#最後に
今回紹介したプラグインを使用すると簡単にshare機能の実装ができるので、試してみてはいかがでしょうか！

宣伝になりますが、先日FlutterとFirebaeを使ったアプリ作成の入門書を作成しました！
興味がありましたら、ぜひBoothにてお買い求めください。
Firebaseとの連携や多言語化対応など取り扱っています。

<img width="1119" alt="スクリーンショット 2018-12-15 午前3.49.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/122004/e8fb9d2a-3c80-4f98-3d95-dcd243f39f23.png">

https://booth.pm/ja/items/1040806