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() を呼ばないとだめだったんでしょうか…
調べたら、すでに対応されてる方がおられました。
ありがたや。
真似して、main メソッドを編集したら、無事APIが動いてGoogle Firebase 上にユーザー登録されました!
いやっほー!
import 'package:firebase_core/firebase_core.dart'; ... Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
Firebase authを使うまでの道のりを整理すると…
- firebase_coreと、firebase_authパッケージをflutter にインストールする。
- Google Firebaseのドキュメントに従ってセットアップする。(「アプリにFirebaseを追加する」
- Podsfile のターゲットを ios 10 以上にする。(上記ドキュメントにも書いてた)
- Firebase.initializeApp を適切なタイミングで実行する。
これで、動く!はず!