フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

FlutterとFirebaseの連携手順のメモ

FirebaseとFlutterの設定

  • Firebaseにプロジェクトを作成する

  • google-service.jsonファイルをダウンロードして下記にフォルダに設置する

\<Your Project Root>\android\app\google-services.json
  • /<Your Project Root>/android/build.gradleファイルにclasspath 'com.google.gms:google-services:4.3.10'に追加する
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.10'
    }
  • android/app/build.gradleファイルに下記の記述を追記する
apply plugin: 'com.google.gms.google-services'


dependencies {
    ・・・・
    implementation platform('com.google.firebase:firebase-bom:29.0.3')
    implementation 'com.google.firebase:firebase-analytics-ktx'
}

エラーが発生したときの対処

  • 上記の設定をしてもエラーが発生する場合、下記の対応して解決したので備忘録としてメモをしておく。

  • android/app/build.gradleファイルの下記の箇所を修正する

From

        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion

To

   minSdkVersion 19
   targetSdkVersion 30
  • android/build.gradleファイルは下記のように変更する From
    //ext.kotlin_version = '1.3.50'
    ext.kotlin_version = '1.6.10'

Flutterのパッケージインストール

  • pubspec.yamlファイルにcloud_firestorefirebase_coreの記述を追加する
dependencies:
  flutter:
   sdk: flutter
(省略)
   cloud_firestore: ^3.1.5
   firebase_core: ^1.10.6
  • android/app/build.gradleファイルにmultiDexEnabledの記述を追加する
    defaultConfig {
(省略)
        multiDexEnabled true
    }

Flutterの実装

  • lib/main.dartファイルのmain関数にFirebaseの初期化とWidgetsFlutterBinding.ensureInitializedを追加する
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}
  • 参考URL

stackoverflow.com

Firestoreへの登録処理

  • 下記のクラスを呼び出すとFirebasestoreにデータが書き込まれる。
import 'package:cloud_firestore/cloud_firestore.dart';

class Firestore {
  static FirebaseFirestore _firebaseFirestore = FirebaseFirestore.instance;
  
  static Future<void> addUser() async {
    try{
      final userRef = await _firebaseFirestore.collection('user').add({
        'name': '山田 太郎',
        'imagePath': 'https://item-shopping.c.yimg.jp/i/l/project1-6_4530956470801',
      });
      print('アカウント作成に成功しました。$userRef');
    } catch (e){
      print('アカウント作成に失敗しました  $e');
    }
  }
}

f:id:PX-WING:20211231193043p:plain