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.

Cómo manejar FutureBuilder cuando no hay valor en la base de datos? Flutter

Estoy tratando de crear una pantalla que utiliza FutureBuilder y cuando hay datos en la base de datos funciona muy bien, pero cuando no se encuentra ningún dato muestra el siguiente error:

FormatException: Final inesperado de la entrada (en el carácter 2)

y aquí está mi código:

 FutureBuilder(
        future: allCars(),
        builder: (context, AsyncSnapshot snapshot){
          if(!snapshot.hasError){
                return Center(child: Text("No hay autos"));
            }
          else {
            if (snapshot.hasError) print(snapshot.error);
            return snapshot.hasData ? ListView.builder(
                itemCount: snapshot.data!.length,
                itemBuilder: (context, index) {
                  List list = snapshot.data;
                  return SingleChildScrollView()
                }

debe mostrar: Text(“No hay autos”) en la pantalla. ¿Pero sigue recargándose cuando no se encuentran datos?
Gracias de antemano <3.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la condición para mostrar el texto “No Cars” está invertida. Actualmente muestra el texto si no hay errores, pero debería mostrar el texto si no hay datos. Esto puede corregirse cambiando la siguiente línea:

    if(!snapshot.hasError){
    

    a

    if(!snapshot.hasData){
    

    De esta forma, el texto “No Cars” solo se mostrará si no hay datos en la instantánea. Además, parece que falta el corchete de cierre para el widget ListView.builder. El código corregido puede escribirse de la siguiente manera:

    FutureBuilder(
      future: allCars(),
      builder: (context, AsyncSnapshot snapshot){
        if(!snapshot.hasData){
          return Center(child: Text("No Cars"));
        }
        else {
          if (snapshot.hasError) print(snapshot.error);
          return ListView.builder(
            itemCount: snapshot.data!.length,
            itemBuilder: (context, index) {
              List list = snapshot.data;
              return SingleChildScrollView();
            }
          );
        }
      }
    );
    

    Esto debería evitar que la pantalla se recargue continuamente y mostrar el texto “No Cars” cuando no hay datos en la instantánea.

Comments are closed.