20
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FirebaseAdvent Calendar 2018

Day 7

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

Last updated at Posted at 2018-12-06

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

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

#Flutterとは

2018-12-06_23h52_24.png

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

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

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

#FlutterとFirebase

2018-12-07_00h02_04.png

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

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

#Cloud Firestore

2018-12-07_00h10_39.png
https://pub.dartlang.org/packages/cloud_firestore

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

#コードをみてみよう

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

取得


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'),
            );
          },
        );
      },
    );
  }

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://booth.pm/ja/items/1040806

20
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?