指定されたブール値(isLoggedIn)がtrueに変更された場合、新しい画面に移動したい画面があります。ビルド中に Navigator を呼び出すことができないため、以下の最初のビルド方法は使用できません。プロバイダーを使用するにはコンテキストにアクセスする必要があるため、ビルドでこれを実行しようとしました。Authorization のプロバイダーからの isLoggedIn の値は、いつでも変更される可能性があるため、これを確認する必要があります。
プロバイダーとナビゲーターを使用してこれを解決するにはどうすればよいですか?
//Not working solution
Widget build(BuildContext context) {
Authorization auth = Provider.of<Authorization>(context);
return Scaffold(
body: Center(
child: auth.isLoggedIn
? Text(
"Logged In",
)
: Navigator.pushReplacementNamed(context, 'sign-in')),
);
}
次のようにナビゲーターなしでそれを行うことができます:
//Working solution
class SplashScreen extends StatelessWidget {
static const routeName = 'splash';
@override
Widget build(BuildContext context) {
final auth = Provider.of<Authorization>(context);
return auth.isLoggedIn ? HomeScreen() : SignInScreen();
}
}
しかし、それが堅実なアプローチである場合、私は今はしません。