Chromium Code Reviews| Index: lib/src/single_subscription_transformer.dart |
| diff --git a/lib/src/single_subscription_transformer.dart b/lib/src/single_subscription_transformer.dart |
| index 4255175f5d797a68111b5c3f978d515ce821c263..e01efac0041095e0d5d31e746bb1a3ef9bbfbfca 100644 |
| --- a/lib/src/single_subscription_transformer.dart |
| +++ b/lib/src/single_subscription_transformer.dart |
| @@ -9,15 +9,26 @@ import 'dart:async'; |
| /// |
| /// This buffers the broadcast stream's events, which means that it starts |
| /// listening to a stream as soon as it's bound. |
| +/// |
| +/// This also casts the source stream's events to type `T`. If the cast fails, |
| +/// the result stream will emit a [CastError]. This behavior is deprecated, and |
| +/// should not be relied upon. |
| class SingleSubscriptionTransformer<S, T> implements StreamTransformer<S, T> { |
| const SingleSubscriptionTransformer(); |
| Stream<T> bind(Stream<S> stream) { |
| var subscription; |
| - var controller = new StreamController(sync: true, |
| + var controller = new StreamController<T>(sync: true, |
| onCancel: () => subscription.cancel()); |
| - subscription = stream.listen(controller.add, |
| - onError: controller.addError, onDone: controller.close); |
| + subscription = stream.listen((value) { |
| + // TODO(nweiz): When we release a new major version, get rid of the second |
| + // type parameter and avoid this conversion. |
|
Lasse Reichstein Nielsen
2016/03/29 21:53:59
The extra type parameter allows you to cast from o
nweiz
2016/03/30 00:57:19
I think having an explicit means of casting is bet
|
| + try { |
| + controller.add(value as T); |
| + } on CastError catch (error, stackTrace) { |
| + controller.addError(error, stackTrace); |
| + } |
| + }, onError: controller.addError, onDone: controller.close); |
| return controller.stream; |
| } |
| } |