es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

getx middleware de redirección como una función futura

Necesito que cuando el usuario abra la aplicación, se muestre la pantalla de presentación. La pantalla de presentación decide si el usuario va a ir a la página de inicio o a iniciar sesión, utilizando un middleware en la capa GetX.

Esta función:

  @override
  RouteSettings? redirect(String? route) async{ // -> error
 GetSignedInUserInfoRepoImp _sigenedInUser = GetSignedInUserInfoRepoImp();
    if ( await _sigenedInUser.isUserSignedIn()) {
      return const RouteSettings(name:  Routes.HOME);
    } else {
      return const RouteSettings(name:  Routes.SIGN_IN);
    }
  }

pero no puedo usar la función redirect con una función future. ¿Qué debo hacer?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar un widget FutureBuilder para esperar a que la función asincrónica redirect se complete antes de navegar a la siguiente pantalla. Aquí tienes un ejemplo de implementación:

    class SplashScreen extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return FutureBuilder(
          future: redirect(),
          builder: (BuildContext context, AsyncSnapshot<routesettings?> snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return snapshot.data?.name == Routes.HOME ? HomePage() : SignInPage();
            } else {
              return Scaffold(
                body: Center(
                  child: CircularProgressIndicator(),
                ),
              );
            }
          },
        );
      }
    
      Future<routesettings?> redirect() async {
        GetSignedInUserInfoRepoImp _signedInUser = GetSignedInUserInfoRepoImp();
        if (await _signedInUser.isUserSignedIn()) {
          return const RouteSettings(name: Routes.HOME);
        } else {
          return const RouteSettings(name: Routes.SIGN_IN);
        }
      }
    }
    

    En esta implementación, el widget SplashScreen devuelve un FutureBuilder que espera a que la función redirect se complete. Una vez que el futuro se completa, se llama a la función builder con un objeto AsyncSnapshot que contiene el resultado del futuro. Si el futuro tiene éxito, se navega a la pantalla correspondiente según las RouteSettings devueltas. Si el futuro aún está en progreso, se muestra un CircularProgressIndicator.</routesettings?></routesettings?>

Comments are closed.