Flutter: mejores prácticas para llamar a códigos asíncronos desde la interfaz de usuario

Estoy desarrollando una aplicación Flutter pero me pregunto qué debo hacer al llamar a un código asincrónico desde la interfaz de usuario, digamos el método de compilación de un widget de interfaz de usuario.

Por ejemplo, mi aplicación conecta Firebase a través de una clase de servicio, que usa el estilo Async-Await para tomar registros de Firebase. El uso de await garantiza que el método de mi clase de servicio completará la recuperación de registros antes de regresar al lado de la interfaz de usuario.

Sin embargo, dado que el método de la clase de servicio está marcado como asíncrono, devuelve un Futuro inmediatamente al widget de la IU llamante y el código de la UI sigue ejecutándose, antes de que se complete el método de la clase de servicio.

Sí, puedo escribir códigos para la devolución de llamada "then ()" para manejar los registros recuperados, pero ¿qué pasa con otros códigos dentro del widget que siguen y dependen del resultado de la llamada asincrónica? ¿Significa que necesito insertar todo dentro de la cláusula "then ()" y evitar agregar pasos de ejecución después de una llamada al método que devuelve un futuro? ¿Algún patrón sugerido para tal modelo de uso?

@override
Widget build(BuildContext context) {

   RealtimeDatabase.getData()  // my service class
      .then((onValue) {
        ..... // do something after the async call is completed
   }

   ..... // do something immediately before the async call is done


class RealtimeDatabase {

    Future<String> getData() async {

    DataSnapshot dataSnapshot = await FirebaseDatabase.instance.reference().orderByKey().once(); // will wait until completed
    .....
    .....

Lo siento si mi descripción aquí es falta de claridad, cualquier consejo es muy bienvenido.

Palanqueta

Respuestas a la pregunta(2)

Su respuesta a la pregunta