Update and fix latest lints, bump min SDK to 3.1 (dart-lang/stream_transform#178)
diff --git a/pkgs/stream_transform/.github/workflows/test-package.yml b/pkgs/stream_transform/.github/workflows/test-package.yml index 2690a5e..b23f0fc 100644 --- a/pkgs/stream_transform/.github/workflows/test-package.yml +++ b/pkgs/stream_transform/.github/workflows/test-package.yml
@@ -47,8 +47,8 @@ matrix: # Add macos-latest and/or windows-latest if relevant for this package. os: [ubuntu-latest] - # Bump SDK for Legacy tets when changning min SDK. - sdk: [2.18.0, dev] + # Bump SDK for Legacy tests when changing min SDK. + sdk: [3.1, dev] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d
diff --git a/pkgs/stream_transform/CHANGELOG.md b/pkgs/stream_transform/CHANGELOG.md index 2ef6fdb..c1e2c0e 100644 --- a/pkgs/stream_transform/CHANGELOG.md +++ b/pkgs/stream_transform/CHANGELOG.md
@@ -1,6 +1,6 @@ -## 2.1.1-dev +## 2.1.1-wip -- Require Dart 2.18 or greater +- Require Dart 3.1 or greater - Forward errors from the `trigger` future through to the result stream in `takeUntil`. Previously an error would have not closed the stream, and instead raised as an unhandled async error.
diff --git a/pkgs/stream_transform/analysis_options.yaml b/pkgs/stream_transform/analysis_options.yaml index 9dc8788..05f1af1 100644 --- a/pkgs/stream_transform/analysis_options.yaml +++ b/pkgs/stream_transform/analysis_options.yaml
@@ -1,4 +1,4 @@ -include: package:lints/recommended.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml analyzer: language: @@ -7,24 +7,10 @@ linter: rules: - - always_declare_return_types - avoid_bool_literals_in_conditional_expressions - avoid_classes_with_only_static_members - - avoid_returning_null - avoid_returning_this - avoid_unused_constructor_parameters - cascade_invocations - - comment_references - - directives_ordering - join_return_with_assignment - no_adjacent_strings_in_list - - omit_local_variable_types - - only_throw_errors - - prefer_const_constructors - - prefer_single_quotes - - test_types_in_equals - - throw_in_finally - - unawaited_futures - - unnecessary_lambdas - - unnecessary_parenthesis - - unnecessary_statements
diff --git a/pkgs/stream_transform/lib/src/async_map.dart b/pkgs/stream_transform/lib/src/async_map.dart index c2ea253..81a176f 100644 --- a/pkgs/stream_transform/lib/src/async_map.dart +++ b/pkgs/stream_transform/lib/src/async_map.dart
@@ -59,8 +59,8 @@ /// pending event. /// /// Errors from this stream are forwarded directly to the result stream. - /// Errors during the conversion are also forwarded to the result stream and are - /// considered completing work so the next values are let through. + /// Errors during the conversion are also forwarded to the result stream and + /// are considered completing work so the next values are let through. /// /// The result stream will not close until this stream closes and all pending /// conversions have finished. @@ -72,7 +72,7 @@ trigger: workFinished.stream, aggregate: _dropPrevious, longPoll: true, - onEmpty: _ignore) + onEmpty: _ignore<T>) ._asyncMapThen(convert, workFinished.add); }
diff --git a/pkgs/stream_transform/lib/src/combine_latest.dart b/pkgs/stream_transform/lib/src/combine_latest.dart index 5fbdbf5..15c1b68 100644 --- a/pkgs/stream_transform/lib/src/combine_latest.dart +++ b/pkgs/stream_transform/lib/src/combine_latest.dart
@@ -152,11 +152,11 @@ /// at least once, the result stream will emit any time any source stream /// emits. /// - /// The result stream will not close until all source streams have closed. When - /// a source stream closes, the result stream will continue to emit the last - /// value from the closed stream when the other source streams emit until the - /// result stream has closed. If a source stream closes without emitting any - /// value, the result stream will close as well. + /// The result stream will not close until all source streams have closed. + /// When a source stream closes, the result stream will continue to emit the + /// last value from the closed stream when the other source streams emit until + /// the result stream has closed. If a source stream closes without emitting + /// any value, the result stream will close as well. /// /// For example: ///
diff --git a/pkgs/stream_transform/lib/src/switch.dart b/pkgs/stream_transform/lib/src/switch.dart index b0fbbad..d64fc07 100644 --- a/pkgs/stream_transform/lib/src/switch.dart +++ b/pkgs/stream_transform/lib/src/switch.dart
@@ -19,7 +19,8 @@ /// /// This means that the source stream is not paused until a sub stream /// returned from the [convert] callback is done. Instead, the subscription - /// to the sub stream is canceled as soon as the source stream emits a new event. + /// to the sub stream is canceled as soon as the source stream emits a new + /// event. /// /// Errors from [convert], the source stream, or any of the sub streams are /// forwarded to the result stream. @@ -36,7 +37,8 @@ /// /// See also: /// - [concurrentAsyncExpand], which emits events from all sub streams - /// concurrently instead of cancelling subscriptions to previous subs streams. + /// concurrently instead of cancelling subscriptions to previous subs + /// streams. Stream<S> switchMap<S>(Stream<S> Function(T) convert) { return map(convert).switchLatest(); }
diff --git a/pkgs/stream_transform/lib/src/where.dart b/pkgs/stream_transform/lib/src/where.dart index 6d210ea..76aa28a 100644 --- a/pkgs/stream_transform/lib/src/where.dart +++ b/pkgs/stream_transform/lib/src/where.dart
@@ -28,10 +28,10 @@ /// Events on the result stream will be emitted in the order that [test] /// completes which may not match the order of this stream. /// - /// If the source stream is a broadcast stream the result will be as well. When - /// used with a broadcast stream behavior also differs from [where] in that - /// the [test] function is only called once per event, rather than once per - /// listener per event. + /// If the source stream is a broadcast stream the result will be as well. + /// When used with a broadcast stream behavior also differs from [where] in + /// that the [test] function is only called once per event, rather than once + /// per listener per event. /// /// Errors from the source stream are forwarded directly to the result stream. /// Errors from [test] are also forwarded to the result stream.
diff --git a/pkgs/stream_transform/pubspec.yaml b/pkgs/stream_transform/pubspec.yaml index 4d1ffbe..9cd6584 100644 --- a/pkgs/stream_transform/pubspec.yaml +++ b/pkgs/stream_transform/pubspec.yaml
@@ -1,13 +1,13 @@ name: stream_transform -version: 2.1.1-dev +version: 2.1.1-wip description: A collection of utilities to transform and manipulate streams. repository: https://github.com/dart-lang/stream_transform environment: - sdk: ">=2.18.0 <3.0.0" + sdk: ^3.1.0 dev_dependencies: async: ^2.5.0 + dart_flutter_team_lints: ^2.0.0 fake_async: ^1.3.0 - lints: ^2.0.0 test: ^1.16.0
diff --git a/pkgs/stream_transform/test/async_expand_test.dart b/pkgs/stream_transform/test/async_expand_test.dart index 3794165..8d84300 100644 --- a/pkgs/stream_transform/test/async_expand_test.dart +++ b/pkgs/stream_transform/test/async_expand_test.dart
@@ -13,7 +13,7 @@ test('forwards errors from the convert callback', () async { var errors = <String>[]; var source = Stream.fromIterable([1, 2, 3]); - source.concurrentAsyncExpand((i) { + source.concurrentAsyncExpand<void>((i) { // ignore: only_throw_errors throw 'Error: $i'; }).listen((_) {}, onError: errors.add);
diff --git a/pkgs/stream_transform/test/async_map_buffer_test.dart b/pkgs/stream_transform/test/async_map_buffer_test.dart index b43c617..2386217 100644 --- a/pkgs/stream_transform/test/async_map_buffer_test.dart +++ b/pkgs/stream_transform/test/async_map_buffer_test.dart
@@ -158,7 +158,7 @@ if (streamType == 'broadcast') { test('multiple listeners all get values', () async { - var otherValues = []; + var otherValues = <String>[]; transformed.listen(otherValues.add); values.add(1); await Future(() {});
diff --git a/pkgs/stream_transform/test/async_map_sample_test.dart b/pkgs/stream_transform/test/async_map_sample_test.dart index 6cab7d0..62b1b92 100644 --- a/pkgs/stream_transform/test/async_map_sample_test.dart +++ b/pkgs/stream_transform/test/async_map_sample_test.dart
@@ -158,7 +158,7 @@ if (streamType == 'broadcast') { test('multiple listeners all get values', () async { - var otherValues = []; + var otherValues = <String>[]; transformed.listen(otherValues.add); values.add(1); await Future(() {}); @@ -204,6 +204,6 @@ test('allows nulls', () async { var stream = Stream<int?>.value(null); - await stream.asyncMapSample(expectAsync1((_) async {})).drain(); + await stream.asyncMapSample(expectAsync1((_) async {})).drain<void>(); }); }
diff --git a/pkgs/stream_transform/test/async_where_test.dart b/pkgs/stream_transform/test/async_where_test.dart index 3a13a38..6ea4e76 100644 --- a/pkgs/stream_transform/test/async_where_test.dart +++ b/pkgs/stream_transform/test/async_where_test.dart
@@ -37,8 +37,8 @@ test('forwards values to multiple listeners', () async { var values = StreamController<int>.broadcast(); var filtered = values.stream.asyncWhere((e) async => e > 2); - var firstValues = []; - var secondValues = []; + var firstValues = <int>[]; + var secondValues = <int>[]; filtered ..listen(firstValues.add) ..listen(secondValues.add); @@ -53,7 +53,7 @@ }); test('closes streams with multiple listeners', () async { - var values = StreamController.broadcast(); + var values = StreamController<int>.broadcast(); var predicate = Completer<bool>(); var filtered = values.stream.asyncWhere((_) => predicate.future); var firstDone = false; @@ -73,15 +73,15 @@ }); test('forwards errors emitted by the test callback', () async { - var errors = []; - var emitted = []; + var errors = <Object>[]; + var emitted = <Object>[]; var values = Stream.fromIterable([1, 2, 3, 4]); var filtered = values.asyncWhere((e) async { await Future(() {}); if (e.isEven) throw Exception('$e'); return true; }); - var done = Completer(); + var done = Completer<Object?>(); filtered.listen(emitted.add, onError: errors.add, onDone: done.complete); await done.future; expect(emitted, [1, 3]);
diff --git a/pkgs/stream_transform/test/audit_test.dart b/pkgs/stream_transform/test/audit_test.dart index e2f8133..28537db 100644 --- a/pkgs/stream_transform/test/audit_test.dart +++ b/pkgs/stream_transform/test/audit_test.dart
@@ -119,7 +119,7 @@ values.add(1); async.elapse(const Duration(milliseconds: 3)); values.add(2); - var otherValues = []; + var otherValues = <int>[]; transformed.listen(otherValues.add); values.add(3); async.elapse(const Duration(milliseconds: 3));
diff --git a/pkgs/stream_transform/test/buffer_test.dart b/pkgs/stream_transform/test/buffer_test.dart index 1675c28..830f555 100644 --- a/pkgs/stream_transform/test/buffer_test.dart +++ b/pkgs/stream_transform/test/buffer_test.dart
@@ -228,7 +228,7 @@ test('emits empty list before values', () async { trigger.add(null); await Future(() {}); - expect(emittedValues, [[]]); + expect(emittedValues, [<int>[]]); }); test('emits empty list after emitting values', () async { @@ -242,7 +242,7 @@ await Future(() {}); expect(emittedValues, [ [1, 2], - [] + <int>[] ]); }); });
diff --git a/pkgs/stream_transform/test/combine_latest_test.dart b/pkgs/stream_transform/test/combine_latest_test.dart index d2c6003..1985c75 100644 --- a/pkgs/stream_transform/test/combine_latest_test.dart +++ b/pkgs/stream_transform/test/combine_latest_test.dart
@@ -127,7 +127,7 @@ var other = StreamController<int>(); int sum(int a, int b) => throw _NumberedException(3); - var errors = []; + var errors = <Object>[]; source.stream .combineLatest(other.stream, sum) .listen(null, onError: errors.add);
diff --git a/pkgs/stream_transform/test/concurrent_async_map_test.dart b/pkgs/stream_transform/test/concurrent_async_map_test.dart index 3c46a96..1807f9f 100644 --- a/pkgs/stream_transform/test/concurrent_async_map_test.dart +++ b/pkgs/stream_transform/test/concurrent_async_map_test.dart
@@ -111,7 +111,7 @@ if (streamType == 'broadcast') { test('multiple listeners all get values', () async { - var otherValues = []; + var otherValues = <String>[]; transformed.listen(otherValues.add); controller.add(1); await Future(() {});
diff --git a/pkgs/stream_transform/test/debounce_test.dart b/pkgs/stream_transform/test/debounce_test.dart index 6b9775f..19de055 100644 --- a/pkgs/stream_transform/test/debounce_test.dart +++ b/pkgs/stream_transform/test/debounce_test.dart
@@ -100,7 +100,7 @@ test('multiple listeners all get values', () { fakeAsync((async) { listen(); - var otherValues = []; + var otherValues = <int>[]; transformed.listen(otherValues.add); values ..add(1) @@ -157,7 +157,7 @@ test('multiple listeners all get values', () { fakeAsync((async) { listen(); - var otherValues = []; + var otherValues = <int>[]; transformed.listen(otherValues.add); values ..add(1) @@ -221,7 +221,7 @@ test('multiple listeners all get values', () { fakeAsync((async) { listen(); - var otherValues = []; + var otherValues = <int>[]; transformed.listen(otherValues.add); values ..add(1) @@ -284,7 +284,7 @@ test('multiple listeners all get values', () { fakeAsync((async) { listen(); - var otherValues = []; + var otherValues = <List<int>>[]; transformed.listen(otherValues.add); values ..add(1)
diff --git a/pkgs/stream_transform/test/followd_by_test.dart b/pkgs/stream_transform/test/followd_by_test.dart index 436d613..d600d13 100644 --- a/pkgs/stream_transform/test/followd_by_test.dart +++ b/pkgs/stream_transform/test/followd_by_test.dart
@@ -138,13 +138,13 @@ }); test('forwards values to multiple listeners', () async { - var otherValues = []; + var otherValues = <int>[]; transformed.listen(otherValues.add); first.add(1); await first.close(); second.add(2); await Future(() {}); - var thirdValues = []; + var thirdValues = <int>[]; transformed.listen(thirdValues.add); second.add(3); await Future(() {});
diff --git a/pkgs/stream_transform/test/merge_test.dart b/pkgs/stream_transform/test/merge_test.dart index 7217945..ecbf97f 100644 --- a/pkgs/stream_transform/test/merge_test.dart +++ b/pkgs/stream_transform/test/merge_test.dart
@@ -20,12 +20,12 @@ test('cancels both sources', () async { var firstCanceled = false; - var first = StreamController() + var first = StreamController<int>() ..onCancel = () { firstCanceled = true; }; var secondCanceled = false; - var second = StreamController() + var second = StreamController<int>() ..onCancel = () { secondCanceled = true; }; @@ -36,8 +36,8 @@ }); test('completes when both sources complete', () async { - var first = StreamController(); - var second = StreamController(); + var first = StreamController<int>(); + var second = StreamController<int>(); var isDone = false; first.stream.merge(second.stream).listen((_) {}, onDone: () { isDone = true; @@ -49,9 +49,9 @@ }); test('can cancel and relisten to broadcast stream', () async { - var first = StreamController.broadcast(); - var second = StreamController(); - var emittedValues = []; + var first = StreamController<int>.broadcast(); + var second = StreamController<int>(); + var emittedValues = <int>[]; var transformed = first.stream.merge(second.stream); var subscription = transformed.listen(emittedValues.add); first.add(1); @@ -84,17 +84,17 @@ test('handles mix of broadcast and single-subscription', () async { var firstCanceled = false; - var first = StreamController.broadcast() + var first = StreamController<int>.broadcast() ..onCancel = () { firstCanceled = true; }; var secondBroadcastCanceled = false; - var secondBroadcast = StreamController.broadcast() + var secondBroadcast = StreamController<int>.broadcast() ..onCancel = () { secondBroadcastCanceled = true; }; var secondSingleCanceled = false; - var secondSingle = StreamController() + var secondSingle = StreamController<int>() ..onCancel = () { secondSingleCanceled = true; }; @@ -102,8 +102,8 @@ var merged = first.stream.mergeAll([secondBroadcast.stream, secondSingle.stream]); - var firstListenerValues = []; - var secondListenerValues = []; + var firstListenerValues = <int>[]; + var secondListenerValues = <int>[]; var firstSubscription = merged.listen(firstListenerValues.add); var secondSubscription = merged.listen(secondListenerValues.add);
diff --git a/pkgs/stream_transform/test/scan_test.dart b/pkgs/stream_transform/test/scan_test.dart index 3a126ec..a0311c5 100644 --- a/pkgs/stream_transform/test/scan_test.dart +++ b/pkgs/stream_transform/test/scan_test.dart
@@ -18,7 +18,7 @@ }); test('can create a broadcast stream', () { - var source = StreamController.broadcast(); + var source = StreamController<int>.broadcast(); var transformed = source.stream.scan(null, (_, __) {}); @@ -30,7 +30,7 @@ int sum(int x, int y) => x + y; - var errors = []; + var errors = <Object>[]; source.stream.scan(0, sum).listen(null, onError: errors.add); @@ -95,7 +95,7 @@ Future<int> combine(int x, int y) async => throw StateError('fail'); - var errors = []; + var errors = <Object>[]; source.stream.scan(0, combine).listen(null, onError: errors.add);
diff --git a/pkgs/stream_transform/test/switch_test.dart b/pkgs/stream_transform/test/switch_test.dart index d2f99a8..9e70c08 100644 --- a/pkgs/stream_transform/test/switch_test.dart +++ b/pkgs/stream_transform/test/switch_test.dart
@@ -196,7 +196,7 @@ test('uses map function', () async { var outer = StreamController<List<int>>(); - var values = []; + var values = <int>[]; outer.stream.switchMap(Stream.fromIterable).listen(values.add); outer.add([1, 2, 3]); @@ -207,9 +207,10 @@ }); test('can create a broadcast stream', () async { - var outer = StreamController.broadcast(); + var outer = StreamController<int>.broadcast(); - var transformed = outer.stream.switchMap((_) => const Stream.empty()); + var transformed = + outer.stream.switchMap((_) => const Stream<int>.empty()); expect(transformed.isBroadcast, true); }); @@ -217,7 +218,7 @@ test('forwards errors from the convert callback', () async { var errors = <String>[]; var source = Stream.fromIterable([1, 2, 3]); - source.switchMap((i) { + source.switchMap<int>((i) { // ignore: only_throw_errors throw 'Error: $i'; }).listen((_) {}, onError: errors.add);
diff --git a/pkgs/stream_transform/test/take_until_test.dart b/pkgs/stream_transform/test/take_until_test.dart index 9c73d09..982b3da 100644 --- a/pkgs/stream_transform/test/take_until_test.dart +++ b/pkgs/stream_transform/test/take_until_test.dart
@@ -80,7 +80,7 @@ await values.close(); closeTrigger.completeError('sad'); await Future(() {}); - expect(errors, []); + expect(errors, <Object>[]); }); test('cancels value subscription when trigger fires', () async { @@ -91,7 +91,7 @@ if (streamType == 'broadcast') { test('multiple listeners all get values', () async { - var otherValues = []; + var otherValues = <Object>[]; transformed.listen(otherValues.add); values ..add(1)
diff --git a/pkgs/stream_transform/test/tap_test.dart b/pkgs/stream_transform/test/tap_test.dart index a42bdc6..f2b4346 100644 --- a/pkgs/stream_transform/test/tap_test.dart +++ b/pkgs/stream_transform/test/tap_test.dart
@@ -9,7 +9,7 @@ void main() { test('calls function for values', () async { - var valuesSeen = []; + var valuesSeen = <int>[]; var stream = Stream.fromIterable([1, 2, 3]); await stream.tap(valuesSeen.add).last; expect(valuesSeen, [1, 2, 3]); @@ -23,7 +23,7 @@ test('calls function for errors', () async { dynamic error; - var source = StreamController(); + var source = StreamController<int>(); source.stream.tap((_) {}, onError: (e, st) { error = e; }).listen((_) {}, onError: (_) {}); @@ -34,8 +34,9 @@ test('forwards errors', () async { dynamic error; - var source = StreamController(); - source.stream.tap((_) {}, onError: (e, st) {}).listen((_) {}, onError: (e) { + var source = StreamController<int>(); + source.stream.tap((_) {}, onError: (e, st) {}).listen((_) {}, + onError: (Object e) { error = e; }); source.addError('error'); @@ -45,7 +46,7 @@ test('calls function on done', () async { var doneCalled = false; - var source = StreamController(); + var source = StreamController<int>(); source.stream.tap((_) {}, onDone: () { doneCalled = true; }).listen((_) {}); @@ -56,7 +57,7 @@ test('forwards only once with multiple listeners on a broadcast stream', () async { var dataCallCount = 0; - var source = StreamController.broadcast(); + var source = StreamController<int>.broadcast(); source.stream.tap((_) { dataCallCount++; }) @@ -71,7 +72,7 @@ 'forwards errors only once with multiple listeners on a broadcast stream', () async { var errorCallCount = 0; - var source = StreamController.broadcast(); + var source = StreamController<int>.broadcast(); source.stream.tap((_) {}, onError: (_, __) { errorCallCount++; }) @@ -85,7 +86,7 @@ test('calls onDone only once with multiple listeners on a broadcast stream', () async { var doneCallCount = 0; - var source = StreamController.broadcast(); + var source = StreamController<int>.broadcast(); source.stream.tap((_) {}, onDone: () { doneCallCount++; }) @@ -96,9 +97,9 @@ }); test('forwards values to multiple listeners', () async { - var source = StreamController.broadcast(); - var emittedValues1 = []; - var emittedValues2 = []; + var source = StreamController<int>.broadcast(); + var emittedValues1 = <int>[]; + var emittedValues2 = <int>[]; source.stream.tap((_) {}) ..listen(emittedValues1.add) ..listen(emittedValues2.add);
diff --git a/pkgs/stream_transform/test/where_not_null_test.dart b/pkgs/stream_transform/test/where_not_null_test.dart index c7e4e9b..c9af794 100644 --- a/pkgs/stream_transform/test/where_not_null_test.dart +++ b/pkgs/stream_transform/test/where_not_null_test.dart
@@ -23,8 +23,8 @@ test('forwards values to multiple listeners', () async { var values = StreamController<Object?>.broadcast(); var filtered = values.stream.whereNotNull(); - var firstValues = []; - var secondValues = []; + var firstValues = <Object>[]; + var secondValues = <Object>[]; filtered ..listen(firstValues.add) ..listen(secondValues.add);
diff --git a/pkgs/stream_transform/test/where_type_test.dart b/pkgs/stream_transform/test/where_type_test.dart index 1a65dd6..4cbea37 100644 --- a/pkgs/stream_transform/test/where_type_test.dart +++ b/pkgs/stream_transform/test/where_type_test.dart
@@ -21,10 +21,10 @@ }); test('forwards values to multiple listeners', () async { - var values = StreamController.broadcast(); + var values = StreamController<Object>.broadcast(); var filtered = values.stream.whereType<String>(); - var firstValues = []; - var secondValues = []; + var firstValues = <Object>[]; + var secondValues = <Object>[]; filtered ..listen(firstValues.add) ..listen(secondValues.add); @@ -39,7 +39,7 @@ }); test('closes streams with multiple listeners', () async { - var values = StreamController.broadcast(); + var values = StreamController<Object>.broadcast(); var filtered = values.stream.whereType<String>(); var firstDone = false; var secondDone = false;