Normal broadcast streams can be a pain. You have to keep track of all stream subscriptions manually, or there can be memory leaks. simple_streams makes it easier by keeping track of those subscriptions for you. Let's look at the standard dart way of using a broadcast stream versus with simple_streams.
First you must create a new broadcast StreamController and keep track of it's stream.
StreamController exampleStreamController = new StreamController.broadcast();
Stream exampleStream = exampleStreamController.stream;
Next, whenever you add a listener to the stream, you must manually keep track of the subscription.
exampleHandler(var e) {
print('test');
}
StreamSubscription sub = exampleStream.listen(exampleHandler);
Finally, you must cancel the subscription when you are done with the stream. If you do not, you will get a memory leak.
sub.cancel();
Everytime you call .listen on that stream, it will create another StreamSubscription. You must keep track of all StreamSubscriptions and cancel all of them, otherwise you will create a memory leak. Or you can use simple streams to make it easier ;)
Instead of creating a stream controller (and probably a separate variable to hold its stream), just create a simple stream.
SimpleStream exampleStream = new SimpleStream();
Next, you can add listeners as many times as you want without keeping track of their subscriptions.
exampleHandler(var e) {
print('test');
}
exampleStream.listen(exampleHandler);
Later, when you are done with the stream and it is going to be destroyed, call cancelAll() and it will cancel all of those subscriptions for you.
exampleStream.cancelAll();
With version 1.1.0 of simple streams, a new class was introduced, SimpleStreamRouter. SimpleStreamRouter is just a wrapper that can be used with any pre-existing stream. For example, you may use it with a DivElement's onClick stream. It will do the same thing as a SimpleStream and keep track of the StreamSubscriptions for you.
SimpleStreamRouter router = new SimpleStreamRouter(querySelector('#example-element').onClick);
Listen to the router without keeping track of StreamSubscriptions. You will receive the same Event by listening to the router as you would to the element's stream itself.
exampleHandler(MouseEvent e) {
print("do something");
}
router.listen(exampleHandler);
When you are done with the router, you can call cancelAll() to avoid memory leaks.
router.cancelAll()
Source code: https://github.com/Nick-Anderssohn/simple-streams
See the example in the test folder.
How to install: https://pub.dartlang.org/packages/simple_streams
Version 1.1.0:
Version 1.0.3:
Version 1.0.2:
Version 1.0.1:
Version 1.0.0:
Add this to your package's pubspec.yaml file:
dependencies:
simple_streams: ^1.1.0
You can install packages from the command line:
with pub:
$ pub get
Alternatively, your editor might support pub get
.
Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:simple_streams/simple_streams.dart';
Version | Uploaded | Documentation | Archive |
---|---|---|---|
1.1.0 | Jun 8, 2017 |
|
|
1.0.3 | Feb 22, 2017 |
|
|
1.0.2 | Feb 22, 2017 |
|
|
1.0.1 | Jan 19, 2017 |
|
|
1.0.0 | Jan 19, 2017 |
|
|
Popularity:
Describes how popular the package is relative to other packages.
[more]
|
0
|
Health:
Code health derived from static analysis.
[more]
|
--
|
Maintenance:
Reflects how tidy and up-to-date the package is.
[more]
|
--
|
Overall:
Weighted score of the above.
[more]
|
0
|
The package version is not analyzed, because it does not support Dart 2. Until this is resolved, the package will receive a health and maintenance score of 0.
Support Dart 2 in pubspec.yaml
.
The SDK constraint in pubspec.yaml
doesn't allow the Dart 2.0.0 release. For information about upgrading it to be Dart 2 compatible, please see https://www.dartlang.org/dart-2#migration.
Make sure dartdoc
successfully runs on your package's source files. (-10 points)
Dependencies were not resolved.
Package | Constraint | Resolved | Available |
---|---|---|---|
Direct dependencies | |||
Dart SDK | any |