RightonSK / flashcards_mobile_app

1 stars 0 forks source link

Sing up, Sign inのUIとロジック #9

Closed RightonSK closed 1 year ago

RightonSK commented 2 years ago

https://pub.dev/packages/flutterfire_ui

このfirebaseの公式パッケージを使おうとしてるんだけど、エラーが出る。

    [!] CocoaPods could not find compatible versions for pod "GoogleSignIn":
      In Podfile:
        google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`) was resolved to 0.0.1, which depends on
          GoogleSignIn (~> 6.2)

    None of your spec sources contain a spec satisfying the dependency: `GoogleSignIn (~> 6.2)`.

とりあえずGoogle Sign in系のパッケージがそもそもないか、古いかのどっちか

Google Sign inのpod(ライブラリ)がなかったみたい。それとなぜかinstallできんかった

RightonSK commented 2 years ago

とりあえずFlutter 大学のBookListプロジェクトのregister pageをまねる。

firebase consoleでとりあえずfirebase authを始める必要があるので、それから調べる

RightonSK commented 2 years ago

アプリ起動→スプラッシュページ→ ユーザーいなければ、ログインページ。 ログイン後、トップページ

RightonSK commented 2 years ago

取り敢えず登録方法とログイン、ログアウトの基本的なやり方はわかった createUserWithEmailAndPassword() signInWithEmailAndPassword() final _auth = FirebaseAuth.instance; await _auth.signOut();

最終的にはGoogleアカウントで登録をやりたい。 ユーザー情報をどこで保持するかが問題

provider? hooks使ってprovider?

RightonSK commented 2 years ago

user情報の確認の際、streamでずっとlistenしてて、userのデータがあったら、そのままBookListPageを開くから、stateを保存するタイミングがない。

そのままかくと、 setState() or markNeedsBuild() called during build. このエラーになる。

Futureとかthenとか使って、BookListPageに遷移する前に、stateに保存できるロジックを考える必要がある。 FutureProviderとかどうなんだろうか?

RightonSK commented 2 years ago

flutterfire_ui使って実装する

RightonSK commented 2 years ago

FlutterFire Uiについて

SigninScreen WidgetとRegister Widgetをそれぞれ用いて、自分のWidgetの中で遷移させたい。

SigninScreenでauthStateがchageした場合は、そのまま次ページへ遷移。 RegisterScreenだとその前にfirestoreへユーザー情報を登録する必要がある。

RightonSK commented 2 years ago

flutter fire uiのパッケージからuiの部品を抜き取ろうかとも考えたが、膨大かつ複雑すぎて、私には無理だった。

そもそもusers collectionを作る必要ってあるのか?基本的に必要なのはuidのみなので、単語を登録するときなどは、currentUserからuidを持ちいれば良いのではないか? ログイン時にcurrent user情報をProviderに与えれば良いのではないだろうか?

RightonSK commented 2 years ago

7/13

取り敢えずflutter fire uiを使って実装してみる。確かflutter fire uiには独自のfirestoreにアクセスするメソッド群みたいなのが公式にあったような そこらへんも確認しい

RightonSK commented 2 years ago

7/14

StreamBuilderの仕様がまず分かってない。手動で画面を遷移していく方法とStreamBuilderを使って、自動的に遷移させる方法があるが、おそらく後者の方がスマートでスタンダートなやり方だと思う。

RightonSK commented 2 years ago

Stream BuilderのStreamの作り方を理解するのが難しい。

一旦、良さげなStream Builderのサンプルをネットから探して、理解していこう

RightonSK commented 2 years ago

どのようにtop pageに遷移する前に、ユーザー情報を保存して、遷移させるか? build中は、state情報に触ることはできない。 当たり前だが、buildをawait処理するなんてできない。

ログインしていたら、splash pageに行き、そこでbuild後処理を行い、遷移させる。とかかな

絶対stream使った方がスマートな気がするが

RightonSK commented 2 years ago

Sign outしたら、アプリを最初から立ち上げたい!

マイページからサインアウトした際に、Sign in pageに遷移するのはWidets tree的に、それまでのページが残っている状態なので、何か気持ち悪い気がする

RightonSK commented 2 years ago

streamでの条件分岐を自分で設定してあげればええのか

ユーザがいない状態:Sign in page ユーザーがいる状態:splash page(データを保存)、top pageに遷移

RightonSK commented 2 years ago

7/20 取り敢えずこのurlのuiを参考にして、視聴したlogin ui動画の作り方真似たら、30分でページ自体は作れそう。

https://zenn.dev/greendrop/articles/15cbe6f2141812

RightonSK commented 2 years ago

修正箇所:

遷移時のアニメーションは、サロンアプリと同じで エラー処理を足す。

RightonSK commented 2 years ago

ログイン後navigateしたから、ログインページに戻れるようになっている

navigate以外のやり方で遷移する? stream builder?

RightonSK commented 2 years ago

pushReplacement使った時って、widets treeはどうなってんの?

RightonSK commented 2 years ago
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だけにするか

RightonSK commented 2 years ago

7/25

sign up時に、document idをuidに設定するのを忘れた。

RightonSK commented 2 years ago

質問:

ログイン、アカウント登録時の例外処理をどこまで書くべきか? 普通のtry-catchを使うと、全てのエラーで停止しなくなるので、良くないんじゃないかと思う

ログイン、アカウント登録周りのロジック。どういうロジックが一般的なのか? このURLの画像みたいなロジックでいいのか? https://qiita.com/granoeste/items/19c119ffc36a016e6223 よく例文を見るけど、streamとかの方がいいのか? それかstateをwatchして、変化したら、再描画して、分岐とか

sign outした時、もう一度、アプリを立ち上げる方法はあるのか? sign outした時って、アプリを立ち上げた方がいいのか?それとも、ログイン画面に戻るだけでいいのか?

RightonSK commented 2 years ago

8/2 ログインのロジックは取り敢えず実装できているので、アカウント登録のロジックを完成させる https://qiita.com/granoeste/items/19c119ffc36a016e6223 その後、上記のページを参考にして、ログイン、ログアウトの処理を完成させる。

原型が完成。 未完成な部分↓ アプリ立ち上げ時に、ログインしていたら?の処理分けがない。

ログインしていたら、アプリ立ち上げ時に、uidを元に、単語などのデータを取ってくる。 していなければ、ログインページに遷移。ログインページからtop pageに遷移する際に、データを取得。