Justo después de que se crea una nueva página, necesito cargar los datos de servicio web (mientras la carga está en curso, se debe mostrar el indicador ocupado), luego, cuando se le está cargando, muestre datos.

Mi enfoque es la carga de datos dentro de initState anulación, de esta manera:

void initState() {
    
      setState(() => _isLoading = true);
      fetchData().then((value) {

       // Do something with data
       widget.value = value;

        setState(() => _isLoading = false);
      });
    }

    super.initState();
  }

Luego, el método de compilación mostrará un indicador de carga, o los datos cargados dependen del valor _isLoading.

Por ahora, funciona, pero no siento que sea una buena manera, especialmente afaik, setState se debe evitar dentro de initState.

¿Puede proporcionar algún consejo cómo hacer lo mismo mejor, sin complicar el código demasiado? ¿O, mi enfoque es aceptable en este caso?

0
user1209216 29 may. 2021 a las 12:05

1 respuesta

La mejor respuesta

¿Por qué no usas FutureBuilder para construir los widgets?
Entonces podrás tratar con el estado 'Cargando' también.

Ejemplo:

return FutureBuilder(
    future: yourAsyncCall,
    builder: (context, snapshot) {
      if (!snapshot.hasData) return MaybeProgressBar();
      else return TheWidgetYouMade();
    }
});
2
DarShan 29 may. 2021 a las 10:54