📌

Cloud Firestore #Flutter

2020/11/01に公開

Flutter cloud firestoreの導入

Cloud Firestoreとは

Cloud Firestoreについて

データベースの選定

データベースはCloud FirestoreとRealtime Databaseがある

データベースの選定

データベースの作成

FirebaseのサイトでCloud Firestoreのデータベースを作成する

データベース作成方法

リージョンについては、下記を選定

FireStoreのデータ構造について

FireStoreはコレクション、ドキュメント、サブコレクションからなる

↓参考

実装方法

build.gradeに下記を追加する

Android/app/build.grade
dependencies {
    implementation 'com.google.firebase:firebase-auth:16.1.0'
    implementation 'com.google.firebase:firebase-core:17.0.0'
    implementation 'com.google.firebase:firebase-firestore:21.2.1'

}

packageのimport

main.dart
import 'package:cloud_firestore/cloud_firestore.dart';

"user"コレクションの中に各ユーザidごとのドキュメントを作成

  1. authインスタンスを作成し、ユーザidを取得
  2. "user"という名前のコレクションを作成する
  3. "user"コレクションに取得したユーザid(uid)ごとのドキュメントを作成
  4. ユーザidドキュメントにニックネームを格納(setData() , アップデート時はupdateData() )
  5. 格納されたニックネームをget()で取得
  6. print()でニックネームをコンソールに表示
                  FirebaseAuth auth =
                      FirebaseAuth.instance; // FirebaseAuthのインスタンス作成
                  final FirebaseUser user = await auth.currentUser(); //ユーザ取得
                  final uid = user.uid; //ユーザid取得
                  print(uid); //ターミナルにユーザid表示
                  // ユーザidの取得はFirebase Authのバージョンにより、方法が異なるので要注意
                  // https://stackoverflow.com/questions/54000825/how-to-get-the-current-user-id-from-firebase-in-flutter
                  await Firestore.instance
                      .collection('user')
                      .document('${uid}')
                      .setData({'nickname': '${_nickName}'});
                  // データをアップデートする場合は.updateDataを使う
                  // .updateData({'nickname': '${_nickName}'});

                  // 先ほど定義したニックネームデータを取得してみる
                  final define_nickName = await Firestore.instance
                      .collection('user')
                      .document('${uid}')
                      .get();
                  // コンソールに取得したニックネームを表示
                  print('${define_nickName['nickname']}');

実際にデータベースに反映されている↓

サブコレクションも基本的には同様の使い方

                  // サブコレクションを使う例(後で消す)
                  await Firestore.instance
                      .collection('user')
                      .document('${uid}')
                      .collection('user_more_info')
                      .document('user_status')
                      .setData({'like': '', 'favorite': '', 'matching': ''});
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => SignUp4()),
                  );

実際にデータベースに反映されている↓

参考サイト

非同期処理
Effective Dart
Fluuter公式FireStore実装
参考になるfirebase実装サイト
FireStoreデータ構造

Discussion