😸
Flutter Web ✖️ GoRouter 認証の流れ
ぶっちゃけ備忘録なので、見てもあまり良い事ないかもしれないです・・・
そのうち、綺麗に書きますのでそれまではただのメモです。
URLが検索されたときの処理
候補1
redirectの中で、認証をする
これだと、認証中ダイアログなどが出せない
redirectの中で非同期書をあまりしたくない。
1.xxxのバージョンとかでは非同期処理がなかった気がする。
候補2
とりあえず、splashみたいなpathに飛ばして、その中で初期認証を行う
その後、それに応じて画面遷移する
ただ、このやり方だと、view model にcontextを持っていく必要がありそうでアンチパターンでは?と思っている
候補3
認証は後回しにして、authStateをstreamProviderで監視をする
そのstreamデータが更新されるごとに画面が変更する(リダイレクト上で)
ただこれだと、認証が完了するまでに3秒くらいのタイムラグがあるから
その3秒間がloginページとかに飛んでしまっている可能性がありそう。
候補4
main関数内でFirebaseの初期化処理をしているから、
FirebaseAuth.currentUser が null かどうかで判断するのもあり。
その他の画面遷移では、基本的にauthStateChangesを当てないしない方針になりそうだけど。
firebaseUser != nullのときの処理:
UserInfoが無い場合は取得してしまっても良い気がする。
redirect処理
redirect {
if(firebaseUser == null) return '/login';
if(userInfo == null){
await ref.read(userInfoFutureProvider).when(
data: (data) => null,
error: (error) => error,
loading: () => '/splash';
);
}
return null;
}
Discussion