もっぺんプログラミング(´・ω・`)

もっぺん頑張って副業プログラマを目指してます。

100日後にFlutter生活:16日目:Firebase Auth パッケージが使えた!

今日は、サンプルコードを動かすところ。

こちらのコードを参考にさせていただいています。

GitHub - daiki1003/firebase_sample at firebase_auth_package

画面は一つのみで、テキストボックスが2つとボタンがあるのみです。
テキストボックスにメールアドレスとパスワードを入れて、ボタンを押したら認証APIを呼び出すという簡単なサンプルです。

こういうサンプルを公開してもらえるのは、ありがたいですね。

キモは、以下の部分

  Future<void> trySubmit() async {
    if (!_form.currentState.validate()) {
      return;
    }

    _form.currentState.save();

    final auth = FirebaseAuth.instance;
    if (_isLogin) {
      final result = await auth.signInWithEmailAndPassword(
          email: _email, password: _password);
      print(result.user.uid);
    } else {
      final result = await auth.createUserWithEmailAndPassword(
          email: _email, password: _password);
      print(result.user.uid);
    }
  }

とりあえず、実行したら「FirebaseAuth.instance;」のところで、以下のエラーが出ました。(´・ω・`)

[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
#0      MethodChannelFirebase.app
package:firebase_core_platform_interface/…/method_channel/method_channel_firebase.dart:118
#1      Firebase.app
package:firebase_core/src/firebase.dart:53
#2      FirebaseAuth.instance
package:firebase_auth/src/firebase_auth.dart:37
#3      _MyHomePageState.trySubmit
package:firefire/main.dart:67
#4      _InkResponseState._handleTap
package:flutter/…/material/ink_well.dart:993
#5      _InkResponseState.build.<anonymous closure>
package:flutter/…/material/ink_well.dart:1111
#6      GestureRecognizer.invokeCallback
package:flutter/…/gestures/recognizer.dart:183
#7      TapGestureRecognizer.handleTapUp
package:flutter/…/gestures/tap.dart:598
#8      BaseTapGestureRecognizer._checkUp
package:flutter/…/gestures/tap.dart:287
#9      BaseTapGestureRecognizer.acceptGesture (pac<…>
[VERBOSE-2:profiler_metrics_ios.mm(184)] Error retrieving thread information: (ipc/send) invalid destination port

どこかで、Firebase.initializeApp() を呼ばないとだめだったんでしょうか…

調べたら、すでに対応されてる方がおられました。
ありがたや。

qiita.com

真似して、main メソッドを編集したら、無事APIが動いてGoogle Firebase 上にユーザー登録されました!
いやっほー!

import 'package:firebase_core/firebase_core.dart';
...

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Firebase authを使うまでの道のりを整理すると…

  1. firebase_coreと、firebase_authパッケージをflutter にインストールする。
  2. Google Firebaseのドキュメントに従ってセットアップする。(「アプリにFirebaseを追加する
  3. Podsfile のターゲットを ios 10 以上にする。(上記ドキュメントにも書いてた)
  4. Firebase.initializeApp を適切なタイミングで実行する。

これで、動く!はず!