0

指定されたブール値(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();
  }
}

しかし、それが堅実なアプローチである場合、私は今はしません。

4

1 に答える 1