こちらのサイトを参考にさせていただいた。
https://www.flutter-study.dev/firebase-app/authentication
元々あったパッケージではうまく動作しなかったので、
パッケージのアップデートを行った。
依存関係でアップデートがうまくいかないときは依存しているパッケージを消して、
エラーがなくなるまで消えたら、1つずつパッケージをアップデートしたらいけた。
以下のパッケージで動いた
pubspec.yaml
firebase_auth: ^1.0.1
firebase_core: ^1.0.2
firebase_storage: ^8.0.0
cloud_firestore: ^1.0.1
login.dart
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
// メッセージ表示用
String infoText = '';
// 入力したメールアドレス・パスワード
String email = '';
String password = '';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
padding: EdgeInsets.all(24),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// メールアドレス入力
TextFormField(
decoration: InputDecoration(labelText: 'メールアドレス'),
onChanged: (String value) {
setState(() {
email = value;
});
},
),
// パスワード入力
TextFormField(
decoration: InputDecoration(labelText: 'パスワード'),
obscureText: true,
onChanged: (String value) {
setState(() {
password = value;
});
},
),
Container(
padding: EdgeInsets.all(8),
// メッセージ表示
child: Text(infoText),
),
Container(
width: double.infinity,
// ユーザー登録ボタン
child: ElevatedButton(
child: Text('ユーザー登録'),
onPressed: () async {
try {
// メール/パスワードでユーザー登録
final FirebaseAuth auth = FirebaseAuth.instance;
final result = await auth.createUserWithEmailAndPassword(
email: email,
password: password,
);
// ユーザー登録に成功した場合
// チャット画面に遷移+ログイン画面を破棄
await Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) {
return MainForm(result.user);
}),
);
} catch (e) {
// ユーザー登録に失敗した場合
setState(() {
infoText = "登録に失敗しました:${e.toString()}";
});
}
},
),
),
const SizedBox(height: 8),
Container(
width: double.infinity,
// ログイン登録ボタン
child: OutlinedButton(
child: Text('ログイン'),
onPressed: () async {
try {
// メール/パスワードでログイン
final FirebaseAuth auth = FirebaseAuth.instance;
final result = await auth.signInWithEmailAndPassword(
email: email,
password: password,
);
// ログインに成功した場合
// チャット画面に遷移+ログイン画面を破棄
await Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) {
return MainForm(result.user);
}),
);
} catch (e) {
// ログインに失敗した場合
setState(() {
infoText = "ログインに失敗しました:${e.toString()}";
});
}
},
),
),
],
),
),
),
);
}
}
main.dart
class MainForm extends StatefulWidget {
//ユーザーの情報を受け取ってる
MainForm(this.user);
final User user;
@override
_MainFormState createState() => _MainFormState();
}
・buildするときにtargetのiOSバージョンが低いのを解消
・podが悪さしてbuildできない、
- flutter clean
- Podsフォルダ、Podfile.lock, Podfile消した
でbuild成功した。
ユーザー認証は動作したが、パッケージをアップデートしたせいで
元々実装していたMLの笑顔判定が動作しなくなった。
一旦諦める