Contents
Contents

Cancel instances of dart.async.StreamSubscription.

This rule is available as of Dart 2.0.0.

Details

#

DO invoke cancel on instances of dart.async.StreamSubscription.

Cancelling instances of StreamSubscription prevents memory leaks and unexpected behavior.

BAD:

dart
class A {
  StreamSubscription _subscriptionA; // LINT
  void init(Stream stream) {
    _subscriptionA = stream.listen((_) {});
  }
}

BAD:

dart
void someFunction() {
  StreamSubscription _subscriptionF; // LINT
}

GOOD:

dart
class B {
  StreamSubscription _subscriptionB; // OK
  void init(Stream stream) {
    _subscriptionB = stream.listen((_) {});
  }

  void dispose(filename) {
    _subscriptionB.cancel();
  }
}

GOOD:

dart
void someFunctionOK() {
  StreamSubscription _subscriptionB; // OK
  _subscriptionB.cancel();
}

Known limitations

This rule does not track all patterns of StreamSubscription instantiations and cancellations. See linter#317 for more information.

Usage

#

To enable the cancel_subscriptions rule, add cancel_subscriptions under linter > rules in your analysis_options.yaml file:

analysis_options.yaml
yaml
linter:
  rules:
    - cancel_subscriptions