Flutter + Cloud Firestore でデータ保存・取得

Flutter + Cloud Firestore でデータ保存・取得

flutterアプリでCloud Firestoreにデータを保存する時の方法について、本ページで記載します。

Cloud Firestoreを使うにはまず別のページで紹介している初期設定が必要になります。

そちらの設定がまだの方はまずページを参照し初期設定を行ってください。

Cloud Firestoreデータ保存

1. Cloud Firestoreパッケージを導入

flutterアプリのpubspec.yaml(プロジェクトフォルダ直下)に「cloud_firestore: ^0.14.2」を追加します。

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2
  firebase_core: ^0.5.1
  firebase_auth: ^0.18.2 
  cloud_firestore: ^0.14.2

^0.14.2は記事を書いている時点の最新のバージョンなので「https://pub.dev/」のサイトでcloud_firestoreと調べて最新バージョンを確認してみてください。

2. cloud_firestoreをimport

cloud_firestoreのパッケージをソースにimportします。

対象のソースで下記のimport文を記載してください

imimport 'package:cloud_firestore/cloud_firestore.dart';

3. database作成

firebaseの対象のプロジェクトのサイトにいきます。

サイトの左の開発→Cloud Firestore→データベースの作成をクリックします。

出てきた画面で本番モードとテストモードのお好きな方を選択し、次へをクリックしてください。

テストモードでは一定期間誰でもデータベースへのアクセスが可能になっています。

今回はテストモードで進めてみます。

次のページでデータベースをどこに置くかを選択、データベースを作成します。

お好きな地域を選んでください。

4. データベースのデータ構造を定義

3の手順が完了したらデータベースに格納するデータがどのようなものなのかを定義してあげます。

作成後の画面にて「コレクション開始」をクリックします。

クリックすると以下の画面が出てきます。ここでは、RDBでいうところのテーブル名のようなものを記載し、次へをクリックします。

次に作成したデータベースに格納する項目を下記の画面で記載します。

今回はtextというString型のフィールドで値はtest

senderというString形のフィールドで値はtest@gmail.com

として保存をおし登録してみます。

データが登録されたのがわかると思います。

これをflutterのアプリから登録する方法をこれから記載していきます。

5. flutterアプリからデータ登録

はじめにfirestoreのメソッドを使うために対象の画面でfirestoreのインスタンスを作成します。

final _firestore = FirebaseFirestore.instance;

次に下記のようなメソッドでデータを登録します。

_firestore.collection("messages").add(
                        {"text": "登録したいデータ ", "sender": "登録したいデータ2"},
                      );

このように呼び出してあげることで

messagesというドキュメントにキーがtext、valueが「登録したいデータ」とkeyが「sender」、valueが「登録したいデータ2」というデータが格納されます。

Cloud Firestoreデータ取得

データ取得は簡単です。下記のようなメソッドを順番に実行していけば取得できます。

void getMessages() async {
    final messages = await _firestore.collection("コレクション名").get();
    for (var message in messages.docs) {
      print(message.data());
    }
  }

この実装ではコレクション名で指定したコレクションにあるデータを全て取得し、consoleに順番に出力しています。

ただし、上記は対象のgetMessages関数が実行されるまではデータ取得を行わないため、例えば、チャットのように他のユーザがメッセージを追加した場合、検知ができません。

firestoreにデータが追加された場合にメッセージの取得が実行されるようにするためには下記のようにsnapshotsメソッドを使用します

void messagesStream() async {
    await for (var snapshot in _firestore.collection("コレクション名").snapshots()) {
      for (var message in snapshot.docs) {
        print(message.data());
      }
    }
  }



Firebaseカテゴリの最新記事