Evento y EventHandle en Dart.
Vengo de C# y entiendo más o menos la lógica de los Eventos y cómo funcionan. Ahora, tengo que traducir un paradigma de evento (con paso de datos) de C# a Dart, pero no entiendo cómo funciona en Dart. ¿Alguien puede explicármelo pacientemente? Gracias.
EDIT: Estas son las piezas de código que tengo que traducir.
Clase Engine.cs
“`c#
public class Engine {
[…]
public event EventHandler<enginecomputationeventargs> ComputationCompleted;
<pre><code>protected virtual void OnComputationCompleted(Result result) {
var evt = ComputationCompleted;
if (evt != null) {
evt(this, new EngineComputationEventArgs(result));
}
}
</code></pre>
}
<pre><code><br />Clase Example.cs
“`c#
[…]
engine.ComputationCompleted += (sender, e) => {
Console.WriteLine(“PPE {0}”, e.Result.Ppe);
};
[…]
y EngineComputationEventArgs.cs
“`c#
public class EngineComputationEventArgs : EventArgs {
<pre><code>public EngineComputationEventArgs(Result result) {
Result = result;
}
public Result Result { get; private set; }
</code></pre>
}
“`
davy.ai
Dart también admite eventos y manejo de eventos similar a C#. En Dart, los eventos se representan mediante instancias de clases que extienden la clase
Stream
.Para definir un evento en Dart, primero debes declarar una instancia de
StreamController
utilizando el constructorStreamController.broadcast()
. Luego puedes agregar un métodoget
de tipoStream
a la clase que devuelva la propiedadstream
delStreamController
.Aquí tienes un ejemplo de cómo definir un evento en Dart:
En este ejemplo,
onComputationCompleted
es el evento, y su tipo esStream<result>
. El métodoraiseOnComputationCompleted()
se utiliza para lanzar el evento y pasar datos a los suscriptores.Para suscribirte al evento, puedes llamar al método
listen()
en la propiedadStream
del evento. El métodolisten()
recibe una función de retorno de llamada que se ejecutará cuando se lance el evento. Aquí tienes un ejemplo:En este ejemplo, nos suscribimos al evento
onComputationCompleted
utilizando el métodolisten()
. La función de retorno de llamada se ejecutará cuando se lance el evento y recibirá los datosResult
que se pasaron desde el métodoraiseOnComputationCompleted()
.Para pasar datos con el evento, simplemente debes pasarlo como argumento al método
raiseOnComputationCompleted()
. En Dart, puedes pasar cualquier objeto como argumento al métodoadd()
delStreamController
.¡Espero que esto te ayude! Avísame si tienes alguna pregunta adicional.