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.

¿Retorno de tipo no válido pero no sé por qué? Flutter/Dart

Hola, soy completamente nueva en Flutter y últimamente he estado trabajando en una aplicación móvil que recibe datos del ESP32 a través de BLE, pero tengo el problema de que si quiero pedirle al usuario que se desconecte del dispositivo de esta manera:

Future<bool> _onWillPop() {
    return showDialog(
        context: context,
        builder: (context) =>
            new AlertDialog(
              title: Text('¿Estás seguro?'),
              content: Text('¿Quieres desconectar el dispositivo y volver atrás?'),
              actions: <widget>[
            new ElevatedButton(
                onPressed: () => 
                  Navigator.of(context).pop(false),
                child: new Text('No')),
            new ElevatedButton(
                onPressed: () {
                  disconnectFromDevice();
                  Navigator.of(context).pop(true);
                },
                child: new Text('Sí')),
          ],
        ) ??
        false);
}

Me devuelve las siguientes advertencias de error:

Un valor de tipo 'Future<dynamic>' no se puede devolver desde el método '_onWillPop' porque tiene un tipo de retorno de 'Future<bool>'.
El tipo de retorno 'Object' no es un 'Widget', como se requiere por el contexto del cierre.

Pero con mi conocimiento actual, no sé cómo solucionar mi problema. Estaría extremadamente agradecida si alguien pudiera ayudarme 🙂 y lo siento por cualquier error gramatical.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para el error ‘Future‘ en Flutter

    El mensaje de error “No se puede devolver un valor de tipo ‘Future‘ desde el método ‘_onWillPop’ porque tiene un tipo de devolución de ‘Future‘” indica que el tipo de devolución del método no coincide con el valor que se está devolviendo.

    Para resolver este problema, debes modificar tu código y convertir el Future a Future, agregando anotaciones de tipo explícitas.

    Aquí te explicamos cómo puedes modificar tu código:

    Future<bool> _onWillPop() async {
      bool isDisconnected = await showDialog(
          context: context,
          builder: (context) =>
              new AlertDialog(
                title: Text('¿Estás seguro?'),
                content: Text('¿Quieres desconectar el dispositivo y volver?'),
    
                actions: <widget>[
                  new ElevatedButton(
                      onPressed: () =>
                          Navigator.of(context).pop(false),
                      child: new Text('No')),
                  new ElevatedButton(
                      onPressed: () {
                        disconnectFromDevice();
                        Navigator.of(context).pop(true);
                      },
                      child: new Text('Sí')),
                ],
              ));
    
      return isDisconnected ?? false;
    }
    

    El código anterior utiliza las palabras clave async/await para convertir el tipo de devolución de showDialog en un Future booleano. La variable booleana añadida isDisconnected se utiliza para comprobar si el dispositivo se ha desconectado o no.

    ¡Esperamos que esto te ayude a resolver tu problema!

Comments are closed.