FlutterとFirebaseで始めるモバイルアプリ

ついにFlutterも正式版になり、これからどんどん広がっていくといいなと思っています。

そんなFlutterとFirebaseをつなげて遊んでみたら面白いのではないでしょうか？

#Flutterとは

![2018-12-06_23h52_24.png](https://qiita-image-store.s3.amazonaws.com/0/97208/953156b9-e9c1-ad61-7537-57ef7db76d29.png)

Googleが開発しているAndroidとiOS上で動くクロスプラットフォーム開発フレームワークです。

「React Native」や「Xamarin」と同じようなものです！

つい先日の12/4にカンファレンスがあり、そこで正式版がリリースされました。
https://flutter.io/

#FlutterとFirebase

![2018-12-07_00h02_04.png](https://qiita-image-store.s3.amazonaws.com/0/97208/e9f7cad4-e127-7f6c-b723-bb735c0b2561.png)

https://github.com/flutter/plugins/blob/master/FlutterFire.md

Flutterでアプリを開発する際にはプラグインを活用するのが基本だと思います。
Firebaseのだいたいの機能についてはライブラリが公開されており、やりたいことは簡単に実現できるようになっています！

Cloud Firestoreを例にもう少し細かいところまで見てみようと思います。

#Cloud Firestore

![2018-12-07_00h10_39.png](https://qiita-image-store.s3.amazonaws.com/0/97208/4cf5c4ba-fa27-996b-4066-b38b6dc7f85e.png)
https://pub.dartlang.org/packages/cloud_firestore

Flutterのライブラリは上記のサイトにまとめられており、このサイトをみることで他のライブラリでも使いかたが大体わかるはずです。
「Installing」のタブをクリックするとインストール方法が記載されているのでそれを参考にするだけで準備できます。

#コードをみてみよう

https://github.com/flutter/plugins/tree/master/packages/cloud_firestore/example

Github上にサンプルプログラムがあります。
それをベースにコードを見てみようと思います。

## 取得

```dart

return StreamBuilder<QuerySnapshot>(
      stream: firestore.collection('messages').snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (!snapshot.hasData) return const Text('Loading...');
        final int messageCount = snapshot.data.documents.length;
        return ListView.builder(
          itemCount: messageCount,
          itemBuilder: (_, int index) {
            final DocumentSnapshot document = snapshot.data.documents[index];
            return ListTile(
              title: Text(document['message'] ?? '<No message retrieved>'),
              subtitle: Text('Message ${index + 1} of $messageCount'),
            );
          },
        );
      },
    );
  }

```
https://github.com/flutter/plugins/blob/master/packages/cloud_firestore/example/lib/main.dart#L35-L52

ListViewでFirebaseに保存されたメッセージを表示するサンプルプログラムになります。

```stream: firestore.collection('messages').snapshots(),```でFirestoreのどの場所からデータを取ってくるのか指定をします。
```if (!snapshot.hasData) return const Text('Loading...');```でデータの取得が完了するまで「Loading...」という表示を行います。
```title: Text(document['message'] ?? '<No message retrieved>'),```で取得したメッセージを表示します。Nullの場合は「No message retrieved」を表示します。

## 保存

https://github.com/flutter/plugins/blob/master/packages/cloud_firestore/example/lib/main.dart#L58-L65
https://github.com/flutter/plugins/blob/master/packages/cloud_firestore/example/lib/main.dart#L75
サンプル通りだと上記の個所なんですが、ちょっとぱっと見分かりにくいなと思ったので別の書き方で進めてみます。

```
firestore.collection('messages').document().setData({
      'message': 'Hello world!',
      'created_at': FieldValue.serverTimestamp(),
    });
```

これを実行すると裏側で非同期でFirestoreにデータを保存します。

# まとめ

簡単にですが、FlutterとFirebaseについてまとめてみました。難しくない…とおもうのでぜひFlutterを始めてみましょう！

最後に宣伝ですが、Flutterの入門本を作成しているので興味がある方はぜひ！
Flutterでの詳しいFirebaseの設定やアイコンの設定、多言語対応などおこなっております！
[![](https://qiita-image-store.s3.amazonaws.com/0/97208/99c7fcf6-f4a7-8296-e267-06892cf55080.png)](https://booth.pm/ja/items/1040806)
https://booth.pm/ja/items/1040806