Closed RightonSK closed 1 year ago
とりあえずFlutter 大学のBookListプロジェクトのregister pageをまねる。
firebase consoleでとりあえずfirebase authを始める必要があるので、それから調べる
アプリ起動→スプラッシュページ→ ユーザーいなければ、ログインページ。 ログイン後、トップページ
取り敢えず登録方法とログイン、ログアウトの基本的なやり方はわかった createUserWithEmailAndPassword() signInWithEmailAndPassword() final _auth = FirebaseAuth.instance; await _auth.signOut();
最終的にはGoogleアカウントで登録をやりたい。 ユーザー情報をどこで保持するかが問題
provider? hooks使ってprovider?
user情報の確認の際、streamでずっとlistenしてて、userのデータがあったら、そのままBookListPageを開くから、stateを保存するタイミングがない。
そのままかくと、 setState() or markNeedsBuild() called during build. このエラーになる。
Futureとかthenとか使って、BookListPageに遷移する前に、stateに保存できるロジックを考える必要がある。 FutureProviderとかどうなんだろうか?
flutterfire_ui使って実装する
FlutterFire Uiについて
SigninScreen WidgetとRegister Widgetをそれぞれ用いて、自分のWidgetの中で遷移させたい。
SigninScreenでauthStateがchageした場合は、そのまま次ページへ遷移。 RegisterScreenだとその前にfirestoreへユーザー情報を登録する必要がある。
flutter fire uiのパッケージからuiの部品を抜き取ろうかとも考えたが、膨大かつ複雑すぎて、私には無理だった。
そもそもusers collectionを作る必要ってあるのか?基本的に必要なのはuidのみなので、単語を登録するときなどは、currentUserからuidを持ちいれば良いのではないか? ログイン時にcurrent user情報をProviderに与えれば良いのではないだろうか?
7/13
取り敢えずflutter fire uiを使って実装してみる。確かflutter fire uiには独自のfirestoreにアクセスするメソッド群みたいなのが公式にあったような そこらへんも確認しい
7/14
StreamBuilderの仕様がまず分かってない。手動で画面を遷移していく方法とStreamBuilderを使って、自動的に遷移させる方法があるが、おそらく後者の方がスマートでスタンダートなやり方だと思う。
Stream BuilderのStreamの作り方を理解するのが難しい。
一旦、良さげなStream Builderのサンプルをネットから探して、理解していこう
どのようにtop pageに遷移する前に、ユーザー情報を保存して、遷移させるか? build中は、state情報に触ることはできない。 当たり前だが、buildをawait処理するなんてできない。
ログインしていたら、splash pageに行き、そこでbuild後処理を行い、遷移させる。とかかな
絶対stream使った方がスマートな気がするが
Sign outしたら、アプリを最初から立ち上げたい!
マイページからサインアウトした際に、Sign in pageに遷移するのはWidets tree的に、それまでのページが残っている状態なので、何か気持ち悪い気がする
streamでの条件分岐を自分で設定してあげればええのか
ユーザがいない状態:Sign in page ユーザーがいる状態:splash page(データを保存)、top pageに遷移
7/20 取り敢えずこのurlのuiを参考にして、視聴したlogin ui動画の作り方真似たら、30分でページ自体は作れそう。
修正箇所:
遷移時のアニメーションは、サロンアプリと同じで エラー処理を足す。
ログイン後navigateしたから、ログインページに戻れるようになっている
navigate以外のやり方で遷移する? stream builder?
pushReplacement使った時って、widets treeはどうなってんの?
The body might complete normally, causing 'null' to be returned, but the return type, 'FutureOr<User>', is a potentially non-nullable type
返り値がnon-nullableなのに、nullで返される可能性があるというエラー文
try {
}on FirebaseAuthException catch (e) {
}
この形なので、firebaseAuthException以外は、catchされず、上位のcatch文でcatchされてしまっている。 上位のcatch文もfirebase auth exceptionだけにするか
7/25
sign up時に、document idをuidに設定するのを忘れた。
質問:
ログイン、アカウント登録時の例外処理をどこまで書くべきか? 普通のtry-catchを使うと、全てのエラーで停止しなくなるので、良くないんじゃないかと思う
ログイン、アカウント登録周りのロジック。どういうロジックが一般的なのか? このURLの画像みたいなロジックでいいのか? https://qiita.com/granoeste/items/19c119ffc36a016e6223 よく例文を見るけど、streamとかの方がいいのか? それかstateをwatchして、変化したら、再描画して、分岐とか
sign outした時、もう一度、アプリを立ち上げる方法はあるのか? sign outした時って、アプリを立ち上げた方がいいのか?それとも、ログイン画面に戻るだけでいいのか?
8/2 ログインのロジックは取り敢えず実装できているので、アカウント登録のロジックを完成させる https://qiita.com/granoeste/items/19c119ffc36a016e6223 その後、上記のページを参考にして、ログイン、ログアウトの処理を完成させる。
原型が完成。 未完成な部分↓ アプリ立ち上げ時に、ログインしていたら?の処理分けがない。
ログインしていたら、アプリ立ち上げ時に、uidを元に、単語などのデータを取ってくる。 していなければ、ログインページに遷移。ログインページからtop pageに遷移する際に、データを取得。
https://pub.dev/packages/flutterfire_ui
このfirebaseの公式パッケージを使おうとしてるんだけど、エラーが出る。
とりあえずGoogle Sign in系のパッケージがそもそもないか、古いかのどっちか
Google Sign inのpod(ライブラリ)がなかったみたい。それとなぜかinstallできんかった