Sobes.tech
Middle

¿Cómo se usan los streams en Flutter?

sobes.tech AI

Respuesta de la IA

Las corrientes en Flutter se utilizan para trabajar con secuencias de eventos asíncronos. Se basan en la paradigma de programación reactiva y ofrecen una forma de procesar datos a medida que llegan.

Aplicaciones principales de las corrientes:

  • Actualizaciones de UI: Escuchar cambios en los datos (por ejemplo, de solicitudes de red o bases de datos) y actualizar automáticamente los widgets.
  • Comunicación entre BLoC/Cubit y UI: BLoC/Cubit utilizan Stream (a través de StateStreamable) para emitir estados, a los que se suscribe la UI.
  • Procesamiento de entrada del usuario: Seguimiento de eventos de entrada (por ejemplo, desde campos de texto).
  • Trabajo con WebSocket y otras operaciones asíncronas: Obtención de datos en tiempo real.

Conceptos principales:

  • Stream: Secuencia de eventos asíncronos.
  • StreamController: Gestiona el stream, permite agregar datos (add), errores (addError) y cerrar el stream (close).
  • StreamSubscription: Objeto que representa una suscripción activa al stream. Permite recibir datos (onData), manejar errores (onError) y finalizar el stream (onDone).

Ejemplo de uso con StreamBuilder:

// Supongamos que tenemos un stream que emite números enteros
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: countStream, // Nos suscribimos al stream
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator(); // Mientras el stream espera datos
        } else if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}'); // Si ocurre un error
        } else {
          return Text('Count: ${snapshot.data}'); // Mostramos los últimos datos del stream
        }
      },
    );
  }
}

Las corrientes pueden ser:

  • Single-subscription: Solo un oyente puede estar suscrito en cualquier momento. Intentar suscribirse una segunda vez causará un error.
  • Broadcast: Múltiples oyentes pueden suscribirse a la misma corriente. Los datos se envían a todos los oyentes activos.

Para procesar corrientes, a menudo se utilizan operadores del paquete rxdart, que proporcionan un conjunto rico de utilidades para transformar, filtrar y combinar corrientes.