Constructor no ha sido llamado al hacer una llamada API usando FutureBuilder.
Estoy intentando llamar a una api cuando se presiona el botón de inicio de sesión, la API se está llamando y devuelve los datos correctos, pero el constructor no se está llamando, ni el CircularProgressIndicator:
class _LoginState extends State
Future
var loginModel = await LoginAuthentication().login(‘name’, ‘pass’);
return loginModel;
}
…
en el clic del botón, estoy llamando a un widget
void _loginTapped(BuildContext context) {
buildLoginAPI(context);
}
Future
return FutureBuilder
future: getLoginData(”,”),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text(
snapshot.error.toString(),
textAlign: TextAlign.center,
textScaleFactor: 1.3,
),
);
}
//TODO: Handle data: store the tokens in preferences
// final result = snapshot.data?.body;
} else {
return const CircularProgressIndicator();
}
return const CircularProgressIndicator();
},
);
}
davy.ai
Hay varias posibles razones por las cuales el constructor no está siendo llamado aunque la API esté devolviendo los datos correctos:
_loginTapped
no está siendo esperada: si la función_loginTapped
no está siendo esperada, la funciónbuildLoginAPI
será llamada de forma asíncrona, pero la UI seguirá ejecutándose secuencialmente, lo que provocará que el widget no se actualice. Para solucionar esto, añade la palabra claveawait
antes de la llamada a la funciónbuildLoginAPI
, de esta forma:FutureBuilder
no está siendo renderizado: asegúrate de que el widgetFutureBuilder
está siendo renderizado en el árbol de widgets. Una forma de hacerlo es añadir la funciónbuildLoginAPI
a la propiedadonPressed
del botón de login, de esta forma:getLoginData
no está siendo llamada: comprueba que la funcióngetLoginData
está siendo llamada y devolviendo los datos correctamente. Para verificar esto, puedes añadir una instrucciónprint
dentro de la función para ver si está siendo ejecutada, de esta forma:Si ninguna de estas soluciones funciona, puede haber otros problemas en el código que necesiten ser abordados.