레코드 필드 이름 규칙을 어겼을 때

레코드 필드 이름 규칙을 어겼을 때

레코드 리터럴이나 레코드 타입 어노테이션에 이름이 올바르지 않은 필드가 있을 때 Dart analyzer가 만들어 내는 진단이에요. 레코드 필드 이름은 몇 가지 제약을 지켜야 해요.

출처: invalid_field_name

본문

이 진단은 레코드 리터럴이나 레코드 타입 어노테이션에 이름이 올바르지 않은 필드가 있을 때 발생해요. 이름이 잘못된 경우는 다음 중 하나예요.

  • private 이름인 경우 (즉 _ 로 시작하는 경우)
  • Object 에 정의된 멤버 중 하나와 같은 이름인 경우
  • positional 필드의 이름과 같은 경우 (단, 그 필드가 지정된 이름을 가진 positional 필드라면 예외예요)

예시

아래 코드는 레코드 리터럴에 toString 이라는 필드가 있는데, toStringObject 에 정의된 메서드라서 이 진단을 만들어 내요.

var r = (a: 1, toString: 4);

아래 코드는 레코드 타입 어노테이션에 hashCode 라는 필드가 있는데, hashCodeObject 에 정의된 getter라서 이 진단을 만들어 내요.

void f(({int a, int hashCode}) r) {}

아래 코드는 레코드 리터럴에 private 필드 _a 가 있어서 이 진단을 만들어 내요.

var r = (_a: 1, b: 2);

아래 코드는 레코드 타입 어노테이션에 private 필드 _a 가 있어서 이 진단을 만들어 내요.

void f(({int _a, int b}) r) {}

아래 코드는 레코드 리터럴에 $1 이라는 필드가 있는데, 이것이 다른 positional 파라미터의 이름과 같아서 이 진단을 만들어 내요.

var r = (2, $1: 1);

아래 코드는 레코드 타입 어노테이션에 $1 이라는 필드가 있는데, 이것이 다른 positional 파라미터의 이름과 같아서 이 진단을 만들어 내요.

void f((int, String, {int $1}) r) {}

고치는 방법

필드 이름을 바꿔 주면 돼요.

var r = (a: 1, d: 4);

더 알아보기

  • 레코드 (Records)
  • Object 의 멤버들