Jenner Acosta Diaz
Dart Website

Streams

En Dart, los Streams son una forma de trabajar con secuencias de eventos asíncronos. Un Stream es una secuencia de valores que se pueden recibir de manera asíncrona y que se pueden consumir y procesar de manera eficiente.

Los Streams permiten recibir y emitir eventos de forma continua a medida que están disponibles, sin tener que esperar a que todos los eventos estén listos antes de procesarlos. Esto es especialmente útil cuando se trabaja con datos en tiempo real, como flujos de datos de sensores, respuestas de API en tiempo real, interacciones de usuario y más.

Para trabajar con Streams en Dart, se utilizan las siguientes clases y conceptos principales:

Aquí tienes un ejemplo básico que muestra cómo trabajar con Streams en Dart:

import 'dart:async';

void main() {
  // Crear un StreamController de tipo String
  StreamController<String> streamController = StreamController<String>();

  // Obtener un Stream desde el StreamController
  Stream<String> stream = streamController.stream;

  // Suscribirse al Stream
  StreamSubscription<String> subscription = stream.listen((data) {
    print('Evento recibido: $data');
  });

  // Emitir eventos al Stream
  streamController.add('Evento 1');
  streamController.add('Evento 2');
  streamController.add('Evento 3');

  // Cerrar el StreamController
  streamController.close();

  // Cancelar la suscripción al Stream
  subscription.cancel();
}

En el ejemplo anterior, se crea un StreamController de tipo String utilizando StreamController<String>. Luego, se obtiene un Stream a partir del StreamController utilizando streamController.stream.

A continuación, se suscribe al Stream utilizando el método listen() y se proporciona una función de devolución de llamada que imprimirá los eventos recibidos.

Después de suscribirse al Stream, se emiten eventos utilizando el método add() del StreamController. En este caso, se agregan tres eventos de tipo String.

Finalmente, se cierra el StreamController utilizando el método close() y se cancela la suscripción al Stream utilizando el método cancel().

En el resultado de la ejecución, verás que se imprimen los eventos recibidos.

Los Streams son una herramienta poderosa para trabajar con eventos asíncronos en Dart. Te permiten manejar secuencias de eventos de manera eficiente y procesarlos a medida que llegan, lo que facilita la programación asíncrona y el trabajo con flujos continuos

de datos.

Ejercicio de la Sesión:

void main() {
  
  emitNumbers().listen( (value) {
    print('Stream value: $value');
  });
  
}

Stream<int> emitNumbers() {
  
  return Stream.periodic( const Duration(seconds: 1), (value){
//     print('desde periodic $value');
    return value;
  }).take(5);
  
}