Merge the null_safety branch into master (dart-lang/stream_channel#60)
diff --git a/pkgs/stream_channel/.travis.yml b/pkgs/stream_channel/.travis.yml index d6a5454..b4907d5 100644 --- a/pkgs/stream_channel/.travis.yml +++ b/pkgs/stream_channel/.travis.yml
@@ -1,27 +1,16 @@ language: dart dart: -- 2.2.0 - dev dart_task: - test: --platform vm,chrome - -matrix: - include: - # Only validate formatting using the dev release - - dart: dev - dart_task: dartfmt - - dart: dev - dart_task: - dartanalyzer: --fatal-infos --fatal-warnings . - - dart: 2.2.0 - dart_task: - dartanalyzer: --fatal-warnings . +- dartfmt +- dartanalyzer: --fatal-infos --fatal-warnings . # Only building master means that we don't run two builds for each pull request. branches: - only: [master] + only: [master, null_safety] cache: directories:
diff --git a/pkgs/stream_channel/CHANGELOG.md b/pkgs/stream_channel/CHANGELOG.md index 8421292..2c4a13c 100644 --- a/pkgs/stream_channel/CHANGELOG.md +++ b/pkgs/stream_channel/CHANGELOG.md
@@ -1,6 +1,6 @@ -## 2.1.0-dev +## 2.1.0-nullsafety -* Require Dart `2.2.0` or later. +* Migrate to null safety. ## 2.0.0
diff --git a/pkgs/stream_channel/analysis_options.yaml b/pkgs/stream_channel/analysis_options.yaml index b36c874..8a712df 100644 --- a/pkgs/stream_channel/analysis_options.yaml +++ b/pkgs/stream_channel/analysis_options.yaml
@@ -8,6 +8,8 @@ unused_element: error unused_local_variable: error dead_code: error + enable-experiment: + - non-nullable linter: rules:
diff --git a/pkgs/stream_channel/lib/src/close_guarantee_channel.dart b/pkgs/stream_channel/lib/src/close_guarantee_channel.dart index 60916d0..25f5022 100644 --- a/pkgs/stream_channel/lib/src/close_guarantee_channel.dart +++ b/pkgs/stream_channel/lib/src/close_guarantee_channel.dart
@@ -16,14 +16,14 @@ class CloseGuaranteeChannel<T> extends StreamChannelMixin<T> { @override Stream<T> get stream => _stream; - _CloseGuaranteeStream<T> _stream; + late final _CloseGuaranteeStream<T> _stream; @override StreamSink<T> get sink => _sink; - _CloseGuaranteeSink<T> _sink; + late final _CloseGuaranteeSink<T> _sink; /// The subscription to the inner stream. - StreamSubscription<T> _subscription; + StreamSubscription<T>? _subscription; /// Whether the sink has closed, causing the underlying channel to disconnect. bool _disconnected = false; @@ -48,8 +48,8 @@ _CloseGuaranteeStream(this._inner, this._channel); @override - StreamSubscription<T> listen(void Function(T) onData, - {Function onError, void Function() onDone, bool cancelOnError}) { + StreamSubscription<T> listen(void Function(T)? onData, + {Function? onError, void Function()? onDone, bool? cancelOnError}) { // If the channel is already disconnected, we shouldn't dispatch anything // but a done event. if (_channel._disconnected) { @@ -80,10 +80,11 @@ Future<void> close() { var done = super.close(); _channel._disconnected = true; - if (_channel._subscription != null) { + var subscription = _channel._subscription; + if (subscription != null) { // Don't dispatch anything but a done event. - _channel._subscription.onData(null); - _channel._subscription.onError(null); + subscription.onData(null); + subscription.onError(null); } return done; }
diff --git a/pkgs/stream_channel/lib/src/disconnector.dart b/pkgs/stream_channel/lib/src/disconnector.dart index e883537..a424146 100644 --- a/pkgs/stream_channel/lib/src/disconnector.dart +++ b/pkgs/stream_channel/lib/src/disconnector.dart
@@ -74,11 +74,11 @@ /// The subscription to the stream passed to [addStream], if a stream is /// currently being added. - StreamSubscription<T> _addStreamSubscription; + StreamSubscription<T>? _addStreamSubscription; /// The completer for the future returned by [addStream], if a stream is /// currently being added. - Completer _addStreamCompleter; + Completer? _addStreamCompleter; /// Whether we're currently adding a stream with [addStream]. bool get _inAddStream => _addStreamSubscription != null; @@ -97,7 +97,7 @@ } @override - void addError(error, [StackTrace stackTrace]) { + void addError(error, [StackTrace? stackTrace]) { if (_closed) throw StateError('Cannot add event after closing.'); if (_inAddStream) { throw StateError('Cannot add event while adding stream.'); @@ -117,8 +117,8 @@ _addStreamCompleter = Completer.sync(); _addStreamSubscription = stream.listen(_inner.add, - onError: _inner.addError, onDone: _addStreamCompleter.complete); - return _addStreamCompleter.future.then((_) { + onError: _inner.addError, onDone: _addStreamCompleter!.complete); + return _addStreamCompleter!.future.then((_) { _addStreamCompleter = null; _addStreamSubscription = null; }); @@ -143,7 +143,7 @@ var future = _inner.close(); if (_inAddStream) { - _addStreamCompleter.complete(_addStreamSubscription.cancel()); + _addStreamCompleter!.complete(_addStreamSubscription!.cancel()); _addStreamCompleter = null; _addStreamSubscription = null; }
diff --git a/pkgs/stream_channel/lib/src/guarantee_channel.dart b/pkgs/stream_channel/lib/src/guarantee_channel.dart index cfee99e..4780b04 100644 --- a/pkgs/stream_channel/lib/src/guarantee_channel.dart +++ b/pkgs/stream_channel/lib/src/guarantee_channel.dart
@@ -17,17 +17,17 @@ @override StreamSink<T> get sink => _sink; - _GuaranteeSink<T> _sink; + late final _GuaranteeSink<T> _sink; /// The controller for [stream]. /// /// This intermediate controller allows us to continue listening for a done /// event even after the user has canceled their subscription, and to send our /// own done event when the sink is closed. - StreamController<T> _streamController; + late final StreamController<T> _streamController; /// The subscription to the inner stream. - StreamSubscription<T> _subscription; + StreamSubscription<T>? _subscription; /// Whether the sink has closed, causing the underlying channel to disconnect. bool _disconnected = false; @@ -64,7 +64,8 @@ /// should stop emitting events. void _onSinkDisconnected() { _disconnected = true; - if (_subscription != null) _subscription.cancel(); + var subscription = _subscription; + if (subscription != null) subscription.cancel(); _streamController.close(); } } @@ -95,11 +96,11 @@ /// The subscription to the stream passed to [addStream], if a stream is /// currently being added. - StreamSubscription<T> _addStreamSubscription; + StreamSubscription<T>? _addStreamSubscription; /// The completer for the future returned by [addStream], if a stream is /// currently being added. - Completer _addStreamCompleter; + Completer? _addStreamCompleter; /// Whether we're currently adding a stream with [addStream]. bool get _inAddStream => _addStreamSubscription != null; @@ -125,7 +126,7 @@ } @override - void addError(error, [StackTrace stackTrace]) { + void addError(error, [StackTrace? stackTrace]) { if (_closed) throw StateError('Cannot add event after closing.'); if (_inAddStream) { throw StateError('Cannot add event while adding stream.'); @@ -139,7 +140,7 @@ /// /// This is called from [addStream], so it shouldn't fail if a stream is being /// added. - void _addError(error, [StackTrace stackTrace]) { + void _addError(Object error, [StackTrace? stackTrace]) { if (_allowErrors) { _inner.addError(error, stackTrace); return; @@ -166,8 +167,8 @@ _addStreamCompleter = Completer.sync(); _addStreamSubscription = stream.listen(_inner.add, - onError: _addError, onDone: _addStreamCompleter.complete); - return _addStreamCompleter.future.then((_) { + onError: _addError, onDone: _addStreamCompleter!.complete); + return _addStreamCompleter!.future.then((_) { _addStreamCompleter = null; _addStreamSubscription = null; }); @@ -199,7 +200,7 @@ if (!_doneCompleter.isCompleted) _doneCompleter.complete(); if (!_inAddStream) return; - _addStreamCompleter.complete(_addStreamSubscription.cancel()); + _addStreamCompleter!.complete(_addStreamSubscription!.cancel()); _addStreamCompleter = null; _addStreamSubscription = null; }
diff --git a/pkgs/stream_channel/lib/src/isolate_channel.dart b/pkgs/stream_channel/lib/src/isolate_channel.dart index 8c1b568..55c9814 100644 --- a/pkgs/stream_channel/lib/src/isolate_channel.dart +++ b/pkgs/stream_channel/lib/src/isolate_channel.dart
@@ -51,7 +51,7 @@ // The first message across the ReceivePort should be a SendPort pointing to // the remote end. If it's not, we'll make the stream emit an error // complaining. - StreamSubscription<dynamic> subscription; + late StreamSubscription<dynamic> subscription; subscription = receivePort.listen((message) { if (message is SendPort) { var controller =
diff --git a/pkgs/stream_channel/lib/src/json_document_transformer.dart b/pkgs/stream_channel/lib/src/json_document_transformer.dart index 8bffc8a..237193b 100644 --- a/pkgs/stream_channel/lib/src/json_document_transformer.dart +++ b/pkgs/stream_channel/lib/src/json_document_transformer.dart
@@ -18,14 +18,14 @@ /// If the transformed channel emits invalid JSON, this emits a /// [FormatException]. If an unencodable object is added to the sink, it /// synchronously throws a [JsonUnsupportedObjectError]. -final StreamChannelTransformer<Object, String> jsonDocument = +final StreamChannelTransformer<Object?, String> jsonDocument = const _JsonDocument(); -class _JsonDocument implements StreamChannelTransformer<Object, String> { +class _JsonDocument implements StreamChannelTransformer<Object?, String> { const _JsonDocument(); @override - StreamChannel<Object> bind(StreamChannel<String> channel) { + StreamChannel<Object?> bind(StreamChannel<String> channel) { var stream = channel.stream.map(jsonDecode); var sink = StreamSinkTransformer<Object, String>.fromHandlers( handleData: (data, sink) {
diff --git a/pkgs/stream_channel/lib/src/multi_channel.dart b/pkgs/stream_channel/lib/src/multi_channel.dart index 79f247e..e1e25ea 100644 --- a/pkgs/stream_channel/lib/src/multi_channel.dart +++ b/pkgs/stream_channel/lib/src/multi_channel.dart
@@ -73,7 +73,7 @@ /// /// Throws an [ArgumentError] if a virtual channel already exists for [id]. /// Throws a [StateError] if the underlying channel is closed. - VirtualChannel<T> virtualChannel([int id]); + VirtualChannel<T> virtualChannel([int? id]); } /// The implementation of [MultiChannel]. @@ -85,10 +85,10 @@ /// The inner channel over which all communication is conducted. /// /// This will be `null` if the underlying communication channel is closed. - StreamChannel<dynamic> _inner; + StreamChannel<dynamic>? _inner; /// The subscription to [_inner].stream. - StreamSubscription<dynamic> _innerStreamSubscription; + StreamSubscription<dynamic>? _innerStreamSubscription; @override Stream<T> get stream => _mainController.foreign.stream; @@ -132,15 +132,15 @@ /// it's coming from a channel that was originally created locally. var _nextId = 1; - _MultiChannel(this._inner) { + _MultiChannel(StreamChannel<dynamic> inner) : _inner = inner { // The default connection is a special case which has id 0 on both ends. // This allows it to begin connected without having to send over an id. _controllers[0] = _mainController; _mainController.local.stream.listen( - (message) => _inner.sink.add([0, message]), + (message) => _inner!.sink.add(<Object?>[0, message]), onDone: () => _closeChannel(0, 0)); - _innerStreamSubscription = _inner.stream.cast<List>().listen((message) { + _innerStreamSubscription = _inner!.stream.cast<List>().listen((message) { var id = message[0] as int; // If the channel was closed before an incoming message was processed, @@ -170,7 +170,7 @@ } @override - VirtualChannel<T> virtualChannel([int id]) { + VirtualChannel<T> virtualChannel([int? id]) { int inputId; int outputId; if (id != null) { @@ -194,11 +194,11 @@ return VirtualChannel._(this, inputId, Stream.empty(), NullStreamSink()); } - StreamChannelController<T> controller; + late StreamChannelController<T> controller; if (_pendingIds.remove(inputId)) { // If we've already received messages for this channel, use the controller // where those messages are buffered. - controller = _controllers[inputId]; + controller = _controllers[inputId]!; } else if (_controllers.containsKey(inputId) || _closedIds.contains(inputId)) { throw ArgumentError('A virtual channel with id $id already exists.'); @@ -208,7 +208,7 @@ } controller.local.stream.listen( - (message) => _inner.sink.add([outputId, message]), + (message) => _inner!.sink.add(<Object?>[outputId, message]), onDone: () => _closeChannel(inputId, outputId)); return VirtualChannel._( this, outputId, controller.foreign.stream, controller.foreign.sink); @@ -218,21 +218,21 @@ /// outgoing messages have [outputId]. void _closeChannel(int inputId, int outputId) { _closedIds.add(inputId); - var controller = _controllers.remove(inputId); + var controller = _controllers.remove(inputId)!; controller.local.sink.close(); if (_inner == null) return; // A message without data indicates that the virtual channel has been // closed. - _inner.sink.add([outputId]); + _inner!.sink.add([outputId]); if (_controllers.isEmpty) _closeInnerChannel(); } /// Closes the underlying communication channel. void _closeInnerChannel() { - _inner.sink.close(); - _innerStreamSubscription.cancel(); + _inner!.sink.close(); + _innerStreamSubscription!.cancel(); _inner = null; // Convert this to a list because the close is dispatched synchronously, and
diff --git a/pkgs/stream_channel/lib/src/stream_channel_completer.dart b/pkgs/stream_channel/lib/src/stream_channel_completer.dart index a14ffde..f6fef25 100644 --- a/pkgs/stream_channel/lib/src/stream_channel_completer.dart +++ b/pkgs/stream_channel/lib/src/stream_channel_completer.dart
@@ -22,7 +22,7 @@ /// The channel for this completer. StreamChannel<T> get channel => _channel; - StreamChannel<T> _channel; + late final StreamChannel<T> _channel; /// Whether [setChannel] has been called. bool _set = false; @@ -66,7 +66,7 @@ /// /// Either [setChannel] or [setError] may be called at most once. Trying to /// call either of them again will fail. - void setError(error, [StackTrace stackTrace]) { + void setError(Object error, [StackTrace? stackTrace]) { if (_set) throw StateError('The channel has already been set.'); _set = true;
diff --git a/pkgs/stream_channel/lib/src/stream_channel_controller.dart b/pkgs/stream_channel/lib/src/stream_channel_controller.dart index 136886d..5c78866 100644 --- a/pkgs/stream_channel/lib/src/stream_channel_controller.dart +++ b/pkgs/stream_channel/lib/src/stream_channel_controller.dart
@@ -33,14 +33,14 @@ /// This channel should be used directly by the creator of this /// [StreamChannelController] to send and receive events. StreamChannel<T> get local => _local; - StreamChannel<T> _local; + late final StreamChannel<T> _local; /// The foreign channel. /// /// This channel should be returned to external users so they can communicate /// with [local]. StreamChannel<T> get foreign => _foreign; - StreamChannel<T> _foreign; + late final StreamChannel<T> _foreign; /// Creates a [StreamChannelController]. ///
diff --git a/pkgs/stream_channel/pubspec.yaml b/pkgs/stream_channel/pubspec.yaml index 61e78c0..e4208b9 100644 --- a/pkgs/stream_channel/pubspec.yaml +++ b/pkgs/stream_channel/pubspec.yaml
@@ -1,5 +1,5 @@ name: stream_channel -version: 2.1.0-dev +version: 2.1.0-nullsafety description: >- An abstraction for two-way communication channels based on the Dart Stream @@ -8,11 +8,86 @@ homepage: https://github.com/dart-lang/stream_channel environment: - sdk: '>=2.2.0 <3.0.0' + sdk: '>=2.9.0-18.0 <2.9.0' dependencies: - async: '>=1.11.0 <3.0.0' + async: '>=2.5.0-nullsafety <2.5.0' dev_dependencies: pedantic: ^1.8.0 test: ^1.2.0 + +dependency_overrides: + async: + git: + url: git://github.com/dart-lang/async.git + ref: null_safety + boolean_selector: + git: + url: git://github.com/dart-lang/boolean_selector.git + ref: null_safety + charcode: + git: + url: git://github.com/dart-lang/charcode.git + ref: null_safety + collection: 1.15.0-nullsafety + js: + git: + url: git://github.com/dart-lang/sdk.git + path: pkg/js + matcher: + git: + url: git://github.com/dart-lang/matcher.git + ref: null_safety + meta: 1.3.0-nullsafety + path: + git: + url: git://github.com/dart-lang/path.git + ref: null_safety + pedantic: + git: + url: git://github.com/dart-lang/pedantic.git + ref: null_safety + pool: + git: + url: git://github.com/dart-lang/pool.git + ref: null_safety + source_maps: + git: + url: git://github.com/dart-lang/source_maps.git + ref: null_safety + source_map_stack_trace: + git: + url: git://github.com/dart-lang/source_map_stack_trace.git + ref: null_safety + source_span: + git: + url: git://github.com/dart-lang/source_span.git + ref: null_safety + stack_trace: + git: + url: git://github.com/dart-lang/stack_trace.git + ref: null_safety + string_scanner: + git: + url: git://github.com/dart-lang/string_scanner.git + ref: null_safety + term_glyph: + git: + url: git://github.com/dart-lang/term_glyph.git + ref: null_safety + test: + git: + url: git://github.com/dart-lang/test.git + path: pkgs/test + ref: null_safety + test_api: + git: + url: git://github.com/dart-lang/test.git + ref: null_safety + path: pkgs/test_api + test_core: + git: + url: git://github.com/dart-lang/test.git + path: pkgs/test_core + ref: null_safety
diff --git a/pkgs/stream_channel/test/disconnector_test.dart b/pkgs/stream_channel/test/disconnector_test.dart index ec0c64b..4f16012 100644 --- a/pkgs/stream_channel/test/disconnector_test.dart +++ b/pkgs/stream_channel/test/disconnector_test.dart
@@ -10,10 +10,10 @@ import 'package:test/test.dart'; void main() { - StreamController streamController; - StreamController sinkController; - Disconnector disconnector; - StreamChannel channel; + late StreamController streamController; + late StreamController sinkController; + late Disconnector disconnector; + late StreamChannel channel; setUp(() { streamController = StreamController(); sinkController = StreamController();
diff --git a/pkgs/stream_channel/test/isolate_channel_test.dart b/pkgs/stream_channel/test/isolate_channel_test.dart index ec26fb6..a1ec37e 100644 --- a/pkgs/stream_channel/test/isolate_channel_test.dart +++ b/pkgs/stream_channel/test/isolate_channel_test.dart
@@ -13,9 +13,9 @@ import 'package:test/test.dart'; void main() { - ReceivePort receivePort; - SendPort sendPort; - StreamChannel channel; + late ReceivePort receivePort; + late SendPort sendPort; + late StreamChannel channel; setUp(() { receivePort = ReceivePort(); var receivePortForSend = ReceivePort(); @@ -128,7 +128,7 @@ }); group('connect constructors', () { - ReceivePort connectPort; + late ReceivePort connectPort; setUp(() { connectPort = ReceivePort(); });
diff --git a/pkgs/stream_channel/test/json_document_transformer_test.dart b/pkgs/stream_channel/test/json_document_transformer_test.dart index 3ccce4e..48d8f72 100644 --- a/pkgs/stream_channel/test/json_document_transformer_test.dart +++ b/pkgs/stream_channel/test/json_document_transformer_test.dart
@@ -9,9 +9,9 @@ import 'package:test/test.dart'; void main() { - StreamController<String> streamController; - StreamController<String> sinkController; - StreamChannel<String> channel; + late StreamController<String> streamController; + late StreamController<String> sinkController; + late StreamChannel<String> channel; setUp(() { streamController = StreamController<String>(); sinkController = StreamController<String>();
diff --git a/pkgs/stream_channel/test/multi_channel_test.dart b/pkgs/stream_channel/test/multi_channel_test.dart index 0fa1df9..00bcabe 100644 --- a/pkgs/stream_channel/test/multi_channel_test.dart +++ b/pkgs/stream_channel/test/multi_channel_test.dart
@@ -7,9 +7,9 @@ import 'package:test/test.dart'; void main() { - StreamChannelController controller; - MultiChannel channel1; - MultiChannel channel2; + late StreamChannelController controller; + late MultiChannel channel1; + late MultiChannel channel2; setUp(() { controller = StreamChannelController(); channel1 = MultiChannel<int>(controller.local); @@ -85,8 +85,8 @@ }); group('a locally-created virtual channel', () { - VirtualChannel virtual1; - VirtualChannel virtual2; + late VirtualChannel virtual1; + late VirtualChannel virtual2; setUp(() { virtual1 = channel1.virtualChannel(); virtual2 = channel2.virtualChannel(virtual1.id); @@ -185,8 +185,8 @@ }); group('a remotely-created virtual channel', () { - VirtualChannel virtual1; - VirtualChannel virtual2; + late VirtualChannel virtual1; + late VirtualChannel virtual2; setUp(() { virtual1 = channel1.virtualChannel(); virtual2 = channel2.virtualChannel(virtual1.id); @@ -297,8 +297,8 @@ }); group('when the underlying stream', () { - VirtualChannel virtual1; - VirtualChannel virtual2; + late VirtualChannel virtual1; + late VirtualChannel virtual2; setUp(() { virtual1 = channel1.virtualChannel(); virtual2 = channel2.virtualChannel(virtual1.id); @@ -406,8 +406,8 @@ }); group('for a virtual channel:', () { - VirtualChannel virtual1; - VirtualChannel virtual2; + late VirtualChannel virtual1; + late VirtualChannel virtual2; setUp(() { virtual1 = channel1.virtualChannel(); virtual2 = channel2.virtualChannel(virtual1.id);
diff --git a/pkgs/stream_channel/test/stream_channel_completer_test.dart b/pkgs/stream_channel/test/stream_channel_completer_test.dart index 234f956..a874925 100644 --- a/pkgs/stream_channel/test/stream_channel_completer_test.dart +++ b/pkgs/stream_channel/test/stream_channel_completer_test.dart
@@ -9,10 +9,10 @@ import 'package:test/test.dart'; void main() { - StreamChannelCompleter completer; - StreamController streamController; - StreamController sinkController; - StreamChannel innerChannel; + late StreamChannelCompleter completer; + late StreamController streamController; + late StreamController sinkController; + late StreamChannel innerChannel; setUp(() { completer = StreamChannelCompleter(); streamController = StreamController();
diff --git a/pkgs/stream_channel/test/stream_channel_controller_test.dart b/pkgs/stream_channel/test/stream_channel_controller_test.dart index 9b7a851..3d661e3 100644 --- a/pkgs/stream_channel/test/stream_channel_controller_test.dart +++ b/pkgs/stream_channel/test/stream_channel_controller_test.dart
@@ -7,7 +7,7 @@ void main() { group('asynchronously', () { - StreamChannelController controller; + late StreamChannelController controller; setUp(() { controller = StreamChannelController(); }); @@ -44,7 +44,7 @@ }); group('synchronously', () { - StreamChannelController controller; + late StreamChannelController controller; setUp(() { controller = StreamChannelController(sync: true); });
diff --git a/pkgs/stream_channel/test/stream_channel_test.dart b/pkgs/stream_channel/test/stream_channel_test.dart index 9bd5a86..e101d20 100644 --- a/pkgs/stream_channel/test/stream_channel_test.dart +++ b/pkgs/stream_channel/test/stream_channel_test.dart
@@ -11,9 +11,9 @@ import 'package:test/test.dart'; void main() { - StreamController streamController; - StreamController sinkController; - StreamChannel channel; + late StreamController streamController; + late StreamController sinkController; + late StreamChannel channel; setUp(() { streamController = StreamController(); sinkController = StreamController();
diff --git a/pkgs/stream_channel/test/with_close_guarantee_test.dart b/pkgs/stream_channel/test/with_close_guarantee_test.dart index 24aef03..decc2b4 100644 --- a/pkgs/stream_channel/test/with_close_guarantee_test.dart +++ b/pkgs/stream_channel/test/with_close_guarantee_test.dart
@@ -17,8 +17,8 @@ StreamSinkTransformer.fromStreamTransformer(_delayTransformer); void main() { - StreamChannelController controller; - StreamChannel channel; + late StreamChannelController controller; + late StreamChannel channel; setUp(() { controller = StreamChannelController();
diff --git a/pkgs/stream_channel/test/with_guarantees_test.dart b/pkgs/stream_channel/test/with_guarantees_test.dart index fa49689..a19dc58 100644 --- a/pkgs/stream_channel/test/with_guarantees_test.dart +++ b/pkgs/stream_channel/test/with_guarantees_test.dart
@@ -9,9 +9,9 @@ import 'package:test/test.dart'; void main() { - StreamController streamController; - StreamController sinkController; - StreamChannel channel; + late StreamController streamController; + late StreamController sinkController; + late StreamChannel channel; setUp(() { streamController = StreamController(); sinkController = StreamController(); @@ -152,7 +152,7 @@ channel.sink.addError('oh no'); expect(channel.sink.done, throwsA('oh no')); sinkController.stream - .listen(null, onError: expectAsync1((_) {}, count: 0)); + .listen(null, onError: expectAsync1((dynamic _) {}, count: 0)); }); test('adding an error causes the stream to emit a done event', () {