Remove default onData for transformByHandlers (dart-lang/stream_transform#187)
Towards dart-lang/stream_transform#111
The default callback is not used in practice outside of tests, but it
included a cast to satisfy the type signature which looks worrying for
this type of library.
Make the callback required and add explicit callbacks (without a cast
since the types are consistent) in the tests which used it.
diff --git a/pkgs/stream_transform/lib/src/from_handlers.dart b/pkgs/stream_transform/lib/src/from_handlers.dart
index f5c4b84..1146a13 100644
--- a/pkgs/stream_transform/lib/src/from_handlers.dart
+++ b/pkgs/stream_transform/lib/src/from_handlers.dart
@@ -11,10 +11,9 @@
/// that the handlers are called once per event rather than called for the
/// same event for each listener on a broadcast stream.
Stream<T> transformByHandlers<T>(
- {void Function(S, EventSink<T>)? onData,
+ {required void Function(S, EventSink<T>) onData,
void Function(Object, StackTrace, EventSink<T>)? onError,
void Function(EventSink<T>)? onDone}) {
- final handleData = onData ?? _defaultHandleData;
final handleError = onError ?? _defaultHandleError;
final handleDone = onDone ?? _defaultHandleDone;
@@ -26,7 +25,7 @@
controller.onListen = () {
assert(subscription == null);
var valuesDone = false;
- subscription = listen((value) => handleData(value, controller),
+ subscription = listen((value) => onData(value, controller),
onError: (Object error, StackTrace stackTrace) {
handleError(error, stackTrace, controller);
}, onDone: () {
@@ -48,10 +47,6 @@
return controller.stream;
}
- static void _defaultHandleData<S, T>(S value, EventSink<T> sink) {
- sink.add(value as T);
- }
-
static void _defaultHandleError<T>(
Object error, StackTrace stackTrace, EventSink<T> sink) {
sink.addError(error, stackTrace);
diff --git a/pkgs/stream_transform/test/from_handlers_test.dart b/pkgs/stream_transform/test/from_handlers_test.dart
index 4e9134f..694199c 100644
--- a/pkgs/stream_transform/test/from_handlers_test.dart
+++ b/pkgs/stream_transform/test/from_handlers_test.dart
@@ -36,7 +36,8 @@
group('default from_handlers', () {
group('Single subscription stream', () {
setUp(() {
- setUpForController(StreamController(), (s) => s.transformByHandlers());
+ setUpForController(StreamController(),
+ (s) => s.transformByHandlers(onData: (e, sink) => sink.add(e)));
});
test('has correct stream type', () {
@@ -75,8 +76,8 @@
late StreamSubscription<int> subscription2;
setUp(() {
- setUpForController(
- StreamController.broadcast(), (s) => s.transformByHandlers());
+ setUpForController(StreamController.broadcast(),
+ (s) => s.transformByHandlers(onData: (e, sink) => sink.add(e)));
emittedValues2 = [];
errors2 = [];
isDone2 = false;