body_might_complete_normally_catch_error 진단: catchError의 onError가 값을 반환하지 않을 때

body_might_complete_normally_catch_error 진단: catchError의 onError가 값을 반환하지 않을 때

body_might_complete_normally_catch_errorFuture.catchError 메서드의 onError로 넘긴 클로저가 필요한 값을 끝까지 반환하지 않고 끝날 때 Dart 분석기가 알려주는 진단이에요. 특히 그 클로저가 null이 아닌 값을 반환해야 하는 상황인데 암묵적으로 null을 반환하게 될 때 발생해요.

출처: body_might_complete_normally_catch_error

본문

설명

분석기는 Future.catchError 메서드의 onError 매개변수로 넘긴 클로저가 (그 Future의 타입 인자 때문에) null이 아닌 값을 반환해야 하는데, 암묵적으로 null을 반환할 수 있을 때 이 진단을 만들어요.

예시

다음 코드는 catchError 메서드로 넘긴 클로저가 int를 반환해야 하는데, 명시적인 return으로 끝나지 않아 암묵적으로 null을 반환하게 되기 때문에 이 진단을 만들어요.

void g(Future<int> f) {
  f.catchError((e, st) {});
}

흔한 해결 방법

클로저가 때때로 null이 아닌 값을 반환해야 한다면, 클로저에 명시적인 return을 추가해요.

void g(Future<int> f) {
  f.catchError((e, st) {
    return -1;
  });
}

클로저가 항상 null을 반환해야 한다면, Future의 타입 인자를 voidNull로 바꿔요.

void g(Future<void> f) {
  f.catchError((e, st) {});
}

더 알아보기