Skip to content

Commit 66c0963

Browse files
committed
nnbd
1 parent 9992dff commit 66c0963

File tree

6 files changed

+32
-37
lines changed

6 files changed

+32
-37
lines changed

lib/src/listenable_to_stream.dart

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,15 @@ import 'package:flutter/foundation.dart' show Listenable, VoidCallback;
66
extension ListenableToStream<T extends Listenable> on T {
77
/// Convert this [Listenable] to a [Stream].
88
Stream<T> toStream() {
9-
StreamController<T> controller;
10-
VoidCallback listener;
9+
late StreamController<T> controller;
10+
VoidCallback? listener;
1111

1212
controller = StreamController<T>(
1313
sync: true,
14-
onListen: () {
15-
listener = () => controller.add(this);
16-
addListener(listener);
17-
},
14+
onListen: () => addListener(listener = () => controller.add(this)),
1815
onCancel: () {
1916
try {
20-
removeListener(listener);
17+
removeListener(listener!);
2118
listener = null;
2219
} catch (_ /*Ignore*/) {}
2320
},

lib/src/streamx.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ extension StartWithExtension<T> on Stream<T> {
77
/// Prepends a value to the source [Stream].
88
Stream<T> startWith(T Function() seededProvider) {
99
final controller = StreamController<T>(sync: true);
10-
StreamSubscription<T> subscription;
10+
late StreamSubscription<T> subscription;
1111

1212
controller.onListen = () {
1313
controller.add(seededProvider());

lib/src/value_listenable_to_value_stream.dart

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:async' show Stream, StreamSubscription;
22

33
import 'package:flutter/foundation.dart' show ValueListenable;
44
import 'package:rxdart/rxdart.dart' show ErrorAndStackTrace, ValueStream;
5+
import 'package:rxdart/src/utils/value_wrapper.dart';
56

67
import 'listenable_to_stream.dart';
78
import 'streamx.dart';
@@ -25,46 +26,42 @@ extension ValueListenableToValueStream<T> on ValueListenable<T> {
2526
class ValueListenableStream<T> extends Stream<T> implements ValueStream<T> {
2627
final ValueListenable<T> _valueListenable;
2728
final bool _replayValue;
28-
Stream<T> _stream;
29+
Stream<T>? _stream;
30+
31+
T _getValue([void _]) => _valueListenable.value;
2932

3033
/// Construct a [ValueListenableStream] from [ValueListenable].
3134
ValueListenableStream(this._valueListenable, this._replayValue);
3235

33-
@override
34-
bool get isBroadcast => false;
35-
36-
@override
37-
ErrorAndStackTrace get errorAndStackTrace => null;
38-
39-
@override
40-
bool get hasError => false;
41-
42-
@override
43-
bool get hasValue => true;
44-
45-
@override
46-
T get value => _valueListenable.value;
47-
4836
@override
4937
StreamSubscription<T> listen(
50-
void Function(T) onData, {
51-
Function onError,
52-
void Function() onDone,
53-
bool cancelOnError,
38+
void Function(T)? onData, {
39+
Function? onError,
40+
void Function()? onDone,
41+
bool? cancelOnError,
5442
}) {
55-
final getValue = ([void _]) => _valueListenable.value;
56-
5743
if (_replayValue) {
58-
_stream ??= _valueListenable.toStream().map(getValue).startWith(getValue);
44+
_stream ??=
45+
_valueListenable.toStream().map(_getValue).startWith(_getValue);
5946
} else {
60-
_stream ??= _valueListenable.toStream().map(getValue);
47+
_stream ??= _valueListenable.toStream().map(_getValue);
6148
}
6249

63-
return _stream.listen(
50+
return _stream!.listen(
6451
onData,
6552
onError: onError,
6653
onDone: onDone,
6754
cancelOnError: cancelOnError,
6855
);
6956
}
57+
58+
@override
59+
bool get isBroadcast => false;
60+
61+
@override
62+
Never get errorAndStackTrace =>
63+
throw StateError('This Stream always has no error!');
64+
65+
@override
66+
ValueWrapper<T> get valueWrapper => ValueWrapper(_getValue());
7067
}

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ packages:
9494
name: rxdart
9595
url: "https://pub.dartlang.org"
9696
source: hosted
97-
version: "0.25.0"
97+
version: "0.26.0-nullsafety.1"
9898
sky_engine:
9999
dependency: transitive
100100
description: flutter

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ 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.7.0 <3.0.0"
10+
sdk: ">=2.12.0-0 <3.0.0"
1111
flutter: ">=1.17.0"
1212

1313
dependencies:
14-
rxdart: ^0.25.0
14+
rxdart: ^0.26.0-nullsafety.1
1515
flutter:
1616
sdk: flutter
1717

test/listenable_stream_test.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/foundation.dart';
22
import 'package:flutter_test/flutter_test.dart';
33
import 'package:listenable_stream/listenable_stream.dart';
4+
import 'package:rxdart/rxdart.dart';
45

56
void _isSingleSubscriptionStream(Stream<dynamic> stream) {
67
expect(stream.isBroadcast, isFalse);
@@ -59,7 +60,7 @@ void main() {
5960
final valueNotifier = ValueNotifier(0);
6061
final stream = valueNotifier.toValueStream(replayValue: true);
6162

62-
expect(stream.value, 0);
63+
expect(stream.requireValue, 0);
6364
expect(
6465
stream,
6566
emitsInOrder([0, 1, 2, 3]),

0 commit comments

Comments
 (0)