1
0

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 1 year has passed since last update.

FlutterでCloud Firestoreを使う(Android)

Posted at

FlutterでCloud Firestoreを使う

スケルトンで作成されるカウンターアプリをFirebaseのCloud Firestoreを使用するカウンターアプリに変更したいと思います。

条件

  • Flutter 2.10.3
  • Cloud Firestoreのテスト開発

事前準備

  • google-services.json

Firebaseで取得したgoogle-services.jsonをapp配下にコピーします。

  • AndroidManifest.xml

"android.permission.INTERNET"を追加する

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sample">

    <uses-permission android:name="android.permission.INTERNET" />
  • google-servicesを追加する
build.gradle
    dependencies {
        classpath 'com.google.gms:google-services:4.3.10'
    }
/app/build.gradle
apply plugin: 'com.google.gms.google-services'

注意として、compileSdkVersion/minSdkVersion/targetSdkVersionは、適切な値に変更しましょう。

  • Flutterにプラグラインを追加
pubspec.yaml
dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2

  # この2つを追加
  firebase_core: ^1.13.1
  cloud_firestore: ^3.1.10

Cloud Firestoreの準備

スクリーンショット 2022-03-04 13.14.09.png

カウンターアプリを変更

  • Firebaseを初期化
main.dart
import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}
  • Firebaseのインスタンスを作成
main.dart
  CollectionReference sample = FirebaseFirestore.instance.collection('sample');
  • _incrementCounter()メソッドを修正

countをインクリメントして、DBを更新します。

main.dart
  void _incrementCounter() async {
    _counter++;
    await sample.doc("doc").update({
      'count': _counter
    });
  }
  • Firebaseの取得

bodyの中身を修正します。
DocumentSnapshotを使用して、sample - doc - countを取得します。

main.dart
      body: StreamBuilder<DocumentSnapshot>(
          stream: sample.doc("doc").snapshots(),
          builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return const Center(child: CircularProgressIndicator());
            }

            if (snapshot.hasData) {
              _counter = snapshot.data!['count'];
              return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    const Text(
                      'You have pushed the button this many times:',
                    ),
                    Text(
                      '$_counter',
                      style: Theme.of(context).textTheme.headline4,
                    ),
                  ],
                ),
              );
            } else {
              return Container();
            }
          }
      ),

以上です。


以外に簡単なことですが、最新の情報がなかったり、一番簡単に操作するサンプルがなかったので自分で作成してみました。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?