Junior
¿Para qué se utilizan los streams en Flutter?
sobes.tech AI
Respuesta de la IA
Los streams en Flutter se utilizan para manejar secuencias de eventos asíncronos.
Casos principales de uso:
- Respuesta a cambios en los datos: Redux, patrones BLoC utilizan streams para gestionar el estado de la aplicación y actualizar la UI de forma reactiva ante cambios.
- Trabajar con datos en flujo: Obtener datos a través de la red (por ejemplo, WebSocket), leer desde archivos, trabajar con sensores del dispositivo.
- Procesar interacciones del usuario: Seguimiento del desplazamiento, Draggable / DragTarget.
- Operaciones asíncronas: Ejecutar tareas en segundo plano y obtener resultados a medida que estén listos.
Conceptos clave:
- Stream: Secuencia de eventos asíncronos. Un stream puede emitir 0 o más eventos y luego finalizar (con éxito o error).
- StreamSubscription: Representa una suscripción a un stream. Permite recibir eventos del stream y gestionar la suscripción (pausar, reanudar, cancelar).
- Sink: Se usa para agregar datos al stream.
- StreamBuilder: Widget que se reconstruye al recibir nuevos datos del stream.
// Ejemplo de uso de StreamBuilder
StreamBuilder<int>(
stream: counterStream, // Tu stream
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
if (snapshot.hasError) {
return Text('Error: \\${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Esperando...');
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.active:
return Text('Valor: \\${snapshot.data}');
case ConnectionState.done:
return Text('Stream finalizado. Último valor: \\${snapshot.data}');
}
},
)
// Ejemplo de un stream simple que emite números
Stream<int> countStream(int max) async* {
for (int i = 0; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i; // Emite el valor
}
}