4.6. Conceptos avanzados de dardos: corrientes y bloques
Página 44 | Escuchar en audio
Streams y Blocs son conceptos avanzados de Dart que le permiten manipular datos de forma asincrónica y reactiva, respectivamente. Estos conceptos son fundamentales para crear aplicaciones complejas y eficientes, y se utilizan ampliamente en Flutter.
Transmisiones
En Dart, una secuencia es una secuencia de eventos asincrónicos. Puede emitir cero o más eventos de datos y un evento de error o finalización. Los eventos de datos se emiten secuencialmente y pueden ser consumidos por un oyente, que es una función que procesa los eventos a medida que ocurren.
Una secuencia se puede crear de varias maneras. La forma más sencilla es utilizar la función Stream.fromIterable, que crea un Stream a partir de una colección iterable. Por ejemplo:
números var = [1, 2, 3, 4, 5]; var flujo = Stream.fromIterable(números); flujo.escuchar((número) { imprimir(número); });
Este código crea una secuencia que genera los números del 1 al 5, uno a la vez. La función de escucha se utiliza para registrar un oyente que imprime cada número a medida que se emite.
También se pueden crear transmisiones a partir de fuentes de datos asincrónicas, como archivos o conexiones de red. Por ejemplo, la clase Archivo en Dart tiene un método openRead que devuelve una secuencia de bytes. Este método se puede utilizar para leer un archivo de forma asincrónica, como en este ejemplo:
var archivo = Archivo('archivo.txt'); var flujo = archivo.openRead(); flujo.escuchar((fecha) { print(String.fromCharCodes(datos)); });
Este código lee un archivo llamado 'file.txt' e imprime su contenido como texto. Stream emite eventos de datos a medida que se leen bytes del archivo y el oyente los convierte en texto y los imprime.
Bloques
En Flutter, el patrón Bloc (Componente de lógica empresarial) se utiliza para separar la lógica empresarial de la interfaz de usuario. Un Bloque es una clase que expone una Corriente de estados y acepta eventos. La lógica empresarial se implementa como una función que asigna eventos a estados.
Por ejemplo, considere una aplicación de lista de tareas pendientes. La interfaz de usuario puede emitir eventos como "agregar tarea" o "eliminar tarea", y el estado de la aplicación puede ser la lista actual de tareas. Un Bloc para esta aplicación se puede implementar de la siguiente manera:
clase TodoBloc { final _stateController = StreamController>(); final _eventController = StreamController
(); Stream > obtener stateStream => _stateController.stream; Sink
get eventSink => _eventController.sink; TodoBloque() { _eventController.stream.listen(_mapEventToState); } void _mapEventToState (evento de evento) { // implementar la lógica de negocios aquí } eliminación nula() { _stateController.close(); _eventController.close(); } }
Este código define un Bloque que tiene un Flujo de estados y un Sumidero de eventos. Sink es una interfaz que le permite agregar eventos al Stream. El método _mapEventToState se llama para cada evento y es responsable de actualizar el estado según el evento.
En resumen, Streams y Blocs son conceptos poderosos de Dart que le permiten crear aplicaciones reactivas y eficientes. Los flujos le permiten manipular datos de forma asincrónica, mientras que los bloques le permiten separar la lógica empresarial de la interfaz de usuario. Ambos son fundamentales para crear aplicaciones complejas con Flutter.
Ahora responde el ejercicio sobre el contenido:
¿Cuáles son las características y funciones de Streams y Blocs en Dart and Flutter?
¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.
¡Tú error! Inténtalo de nuevo.
Siguiente página del libro electrónico gratuito: