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.

Excepción no controlada: el tipo ‘Null’ no es un subtipo del tipo ‘int’ al usar la función de inicio de sesión.

El siguiente método funciona bien y puedo registrar un nuevo usuario en la parte trasera de mi aplicación basada en Parse.

void doUserRegistration() async {

    final username = _textEditControllerEmailField.text.trim();
    final password = _textEditControllerPasswordField.text.trim();
    final user = ParseUser.createUser(username, password, username);

    var response = await user.signUp(allowWithoutEmail: true);

    if (response.success) {

      Navigator.of(context).pushNamedAndRemoveUntil('settingsPage', (route) => false);
    } else {
      showError(response.error!.message);
    }
}

Pero este método falla con el error en el título de arriba.

void doUserLogin() async {

    final username = _textEditControllerEmailField.text.trim();
    final password = _textEditControllerPasswordField.text.trim();
    var user1 =  ParseUser.createUser(username, password, username);

    var response = await user1.login();

    if (response.success) {

      Navigator.of(context).pushNamedAndRemoveUntil('settingsPage', (route) => false);
    } else {
      showError(response.error!.message);
    }
}

¿Alguien puede ayudarme a entender por qué? Verifiqué esta página https://pub.dev/packages/parse_serversdk_flutter y las llamadas de inicio de sesión mostradas allí tampoco funcionan.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la variable user1. En el método doUserLogin(), estás creando un nuevo objeto ParseUser y tratando de iniciar sesión inmediatamente después. Sin embargo, deberías estar usando el objeto ParseUser que creaste durante el registro para iniciar sesión.

    Para solucionar esto, debes recuperar el objeto ParseUser del backend utilizando el método ParseUser.getCurrentUser() antes de intentar iniciar sesión. Aquí tienes una versión actualizada de doUserLogin():

    void doUserLogin() async {
    
        final username = _textEditControllerEmailField.text.trim();
        final password = _textEditControllerPasswordField.text.trim();
        var user = ParseUser(username, password, username);
    
        var response = await user.login();
    
        if (response.success) {
            // Obtén el usuario actual desde el backend
            ParseUser currentUser = await ParseUser.currentUser();
    
            Navigator.of(context).pushNamedAndRemoveUntil('settingsPage', (route) => false);
        } else {
            showError(response.error!.message);
        }
    }
    

    Ten en cuenta que ahora estamos utilizando ParseUser(username, password, username) en lugar de ParseUser.createUser(username, password, username) para crear un nuevo objeto ParseUser.

    También recuperamos el usuario actual del backend utilizando el método await ParseUser.currentUser() antes de navegar a la página de configuración. Esto asegura que estemos utilizando el objeto ParseUser correcto para interactuar con el backend.

Comments are closed.