StreamSubscription은 반드시 cancel 해주세요

StreamSubscription은 반드시 cancel 해주세요

dart:asyncStreamSubscription 인스턴스는 사용한 뒤 반드시 cancel을 호출해 주세요. 구독을 취소하지 않으면 메모리 누수나 예상치 못한 동작이 생길 수 있어요.

출처: cancel_subscriptions

본문

dart:asyncStreamSubscription 인스턴스에는 cancel을 호출하는 걸 권장해요.

StreamSubscription을 취소하면 메모리 누수와 예상치 못한 동작을 막을 수 있어요.

BAD 예시:

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

BAD:

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

GOOD 예시:

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

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

GOOD:

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

알려진 제한 사항

이 규칙은 StreamSubscription이 만들고 취소되는 모든 패턴을 추적하지는 못해요. 자세한 내용은 linter#317를 참고해 주세요.

활성화하기

cancel_subscriptions 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 cancel_subscriptions를 추가하면 돼요.

linter:
  rules:
    - cancel_subscriptions

만약 linter 규칙을 YAML 맵 문법으로 설정한다면 linter > rules 아래에 cancel_subscriptions: true라고 적어 주면 돼요.

linter:
  rules:
    cancel_subscriptions: true

더 알아보기