Skip to content

Commit 8a167fe

Browse files
committed
update startWith
1 parent 3eac404 commit 8a167fe

File tree

2 files changed

+15
-55
lines changed

2 files changed

+15
-55
lines changed

lib/src/streamx.dart

Lines changed: 14 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,25 @@
1-
import 'dart:async'
2-
show MultiStreamController, Stream, StreamController, StreamSubscription;
1+
import 'dart:async' show Stream, StreamController, StreamSubscription;
32

43
/// @private
54
/// Prepends a value to the source [Stream].
65
extension StartWithExtension<T> on Stream<T> {
76
/// @private
87
/// Prepends a value to the source [Stream].
98
Stream<T> startWith(T Function() seededProvider) {
10-
MultiStreamController<T> controller;
11-
StreamSubscription<T> subscription;
12-
13-
final listenUpStream = () => listen(
14-
controller.addSync,
15-
onError: controller.addErrorSync,
16-
onDone: () {
17-
subscription = null;
18-
controller.closeSync();
19-
},
20-
);
21-
22-
final onListen = (MultiStreamController<T> c) {
23-
if (controller != null) {
24-
return;
25-
}
26-
27-
controller = c;
28-
controller.addSync(seededProvider());
29-
30-
subscription = listenUpStream();
31-
controller.onCancel = () {
32-
subscription?.cancel();
33-
subscription = null;
34-
};
9+
final controller = StreamController<T>(sync: true);
10+
StreamSubscription subscription;
11+
12+
controller.onListen = () {
13+
controller.add(seededProvider());
14+
subscription = listen(
15+
controller.add,
16+
onError: controller.addError,
17+
onDone: controller.close,
18+
);
3519
};
36-
37-
return Stream.multi(onListen, isBroadcast: false).toSingleSubscription();
38-
}
39-
}
40-
41-
/// @private
42-
/// Convert a [Stream] to Single-Subscription [Stream].
43-
extension ToSingleSubscriptionStreamExtension<T> on Stream<T> {
44-
/// @private
45-
/// Convert a [Stream] to Single-Subscription [Stream].
46-
Stream<T> toSingleSubscription() {
47-
StreamController<T> controller;
48-
StreamSubscription<T> subscription;
49-
50-
controller = StreamController<T>(
51-
sync: true,
52-
onListen: () {
53-
subscription = listen(
54-
controller.add,
55-
onError: controller.addError,
56-
onDone: controller.close,
57-
);
58-
},
59-
onPause: () => subscription.pause(),
60-
onResume: () => subscription.resume(),
61-
onCancel: () => subscription.cancel(),
62-
);
20+
controller.onPause = () => subscription.pause();
21+
controller.onResume = () => subscription.resume();
22+
controller.onCancel = () => subscription.cancel();
6323

6424
return controller.stream;
6525
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ repository: https://github.com/Flutter-Dart-Open-Source/listenable_stream.git
77
issue_tracker: https://github.com/Flutter-Dart-Open-Source/listenable_stream/issues
88

99
environment:
10-
sdk: ">=2.9.0 <3.0.0"
10+
sdk: ">=2.7.0 <3.0.0"
1111
flutter: ">=1.17.0"
1212

1313
dependencies:

0 commit comments

Comments
 (0)