event 3.1.0
event: ^3.1.0 copied to clipboard
Create lightweight custom Events, that allow interested subscribers to be notified that something has happened.
Changelog - Event #
3.1.0 - 2024-09-10 #
- Minor internal changes
- Diagnostic logging is available. See the new
Diagnosticssection inREADME.mdand the example application for further information. - Both the
subscribe()andbroadcast()Event methods produce diagnostic messages at Severitydebug. To output these messages use the showLog() method with Severitydebug. See the example application.
// Example diagnostics logging output
Event (debug): 2024-09-10 11:37:49.665124Z Subscribed to Event "countChanged:Event<EventArgs>"
Event (debug): 2024-09-10 11:37:49.675925Z Broadcast Event "countChanged:Event<EventArgs>"
3.0.0 - 2024-08-05 #
This version has BREAKING CHANGES
- Minimum Dart sdk dependency is now 3.4.0
- An EventArgs instance is created and broadcast automatically if none provided, i.e.
var e = Event();
// is equivalent to...
var e = Event<EventArgs>();
- An Event can have a name specified. Some code might be subscribed to more than one Event, so this lets one know which Event caused the code to run.
var e = Event("CountUpdatedEvent");
e.subscribe((args) => print(args.eventName));
// outputs "null" until the event is broadcast.
e.broadcast();
// outputs "CountUpdatedEvent"
- EventArgs includes two accessible values:- eventName and whenOccurred. Both have a default value of
null, and are only populated when the Event is broadcast.
// Example without Event name
var e = Event();
e.subscribe((args) {
print(args.eventName); // outputs null
print(args.whenOccurred); // outputs time of broadcast
};
e.broadcast();
// Example specifying an Event name
var e = Event("myEvent");
e.subscribe((args) {
print(args.eventName); // outputs "myEvent"
print(args.whenOccurred); // outputs time of broadcast
};
e.broadcast();
- The WhenWhy EventArg derived class is DEPRECATED and removed. Use the EventArgs whenOccurred property instead.
- The + and - equivalents to subscribe() and unsubscribe() have been DEPRECATED and removed for simplicity.
- A custom ArgsError is thrown if an Event is broadcast() without an appropriate argument
var e = Event<CustomEventArgs>();
// following throws an ArgsError because broadcast()
// specifies no CustomEventArgs
e.broadcast();
// In this case, the ArgsError message shown would be...
// "Incorrect args being broadcast - args should be a CustomEventArgs"
// instead, following is correct
e.broadcast(CustomEventArgs("hello"));
- A new property genericType has been added to the Event class. Gets the generic type of the Event, e.g.
var e = Event<Value<int>>();
assert(e.genericType == Value<int>);
- The broadcast() method now returns a bool, indicating if the broadcast had subscribers or not. No subscribers means the broadcast() method is effectively ignored.
var e = Event();
// no subscribers
var hadEffect = e.broadcast();
assert(hadEffect == false);
- A syntactical alternative to the
broadcastmethod -notifySubscribers- has been added.
2.1.2 - 2022-01-11 #
- Small README changes
2.1.0 - 2022-01-10 #
-
Improved README
-
** Breaking Changes **
StdEventArgsrenamed toWhenWhyto better indicate what the arguments represent.
var e = Event<WhenWhy>();
e.broadcast(WhenWhy(description: 'some info'));
- EventArgs
ValueandValuesnow derive fromEventArgsrather than WhenWhy (formerly StdEventArgs).
2.0.5 - 2021-05-10 #
- Fix issue #5. Support the ability to unsubscribeAll within an Event handler.
2.0.4 - 2021-05-10 #
GenericEventArg1andGenericEventArg2Event argument types renamed toValueandValues. Better reflects common usage.Valuessupports two values, whileValuesupports one.
var e = Event<Value>(); // Event will include a value as an argument
e.broadcast(Value(39)); // type of the Value inferred to be an int
// equivalent to
var e = Event<Value<int>>(); // type of the Value can also be explicit
e.broadcast(Value(39));
- Updated tests.
2.0.3 - 2021-05-09 #
- Make the list of handlers a non-nullable Type that is created lazily using the new 'late' keyword.
This simplifies the code substantially, because no null checks etc. are required.
2.0.2 - 2021-05-08 #
- Fixed issue #7 https://github.com/aryehof/dart-event/issues/7
- Updated tests.
2.0.1 - 2021-03-08 #
- Fixed incorrect link to Changelog in README.
2.0.0 - 2021-03-08 #
- Null safe. (Min SDK version 2.12.0)
- Changes to README content and layout.
1.1.5 - 2021-02-28 #
- Minor changes to README content and layout.
1.1.4 - 2020-06-10 #
-
Added a
subscribeStreammethod to Event, which supports the broadcasting of Events to a DartStream[StreamSink].This allows a sequence of broadcast Events to be represented and manipulated as a Dart
Stream. The rich range of mechanisms to filter and manipulate Streams become available.Remember that the supplied [StreamSink] should be closed when no longer needed.
// Example var e = Event(); var sc = StreamController(); e.subscribeStream(sc.sink); e.broadcast(); sc.stream.listen((e) => print('boom')); sc.close();
1.1.3 - 2020-02-14 #
- BasicEventArgs renamed to StdEventArgs for clarity.
1.1.2 - 2020-02-09 #
- EventArgs changes
- Added
BasicEventArgsas a standardEventArgsderived type. It includes awhenOccurredfield that contains the date and time the Event wasbroadcast, as well as an optionaldescriptionfield. - Renamed
EventArgs1andEventArgs2toGenericEventArgs1andGenericEventArgs2respectively, to better indicate their purpose. Both are now derived fromBasicEventArgs, meaning that they havewhenOccurredand (optional)descriptionfields. - Improvements to documentation
- Added
- Minor improvements to Event documentation.
1.1.1 - 2020-02-03 #
- Add new method
unsubscribeAll, to unsubscribe all subscribers (handlers).
1.1.0 - 2020-01-29 #
Breaking Change
The function signature for an Event has been simplified. The sender argument has been removed, leaving only the need to provide an optional argument derived from type EventArgs.
The sender argument was previously intended to be used to provide the source of the Event, or the object in which the Event was declared, to a subscriber. This can be equally well done within an EventArg passed as an argument to a subscriber.
// Before
// subscribe to onValueChanged Event
myCounter.onValueChanged + (sender, args) => print('before');
// Now
// subscribe to onValueChanged Event
myCounter.onValueChanged + (args) => print('after');
Other Breaking Changes
- Renamed
addHandlerandremoveHandlermethods tosubscribeandunsubscriberespectively. - Renamed
raisemethods tobroadcast. - Method
broadcastWithSubjectremoved to reflect to removal ofsenderdescribed above. - The
countmethod has been renamed to `subscriberCount'
Other
- Two general purpose EventArg derived classes (
EventArgs1andEventArgs2) have been included, which offers a quick alternative to producing your own custom EventArgs class.
EventArgs1 supports one generic value, while EventArgs2 supports two. Example:-
// EventArgs1 (one value)
var e = Event<EventArgs1<String>>();
e.subscribe((args) => print(args.value));
e.broadcast(EventArgs1('hello'));
// prints hello
// EventArgs2 (two values)
var e = Event<EventArgs2<String, int>>();
e.subscribe((args) => print('${args.value1} - ${args.value2}'));
e.broadcast(EventArgs2('boom', 37));
// prints boom - 37
1.0.3 - 2020-01-22 #
- Added image of elevator example to README.
1.0.2 - 2020-01-22 #
- Updated reference to Flutter EventSubscriber in the README.
- Minor documentation improvements
1.0.1 - 2020-01-22 #
- Documentation improvements and corrections
1.0.0 - 2020-01-22 #
- Initial release