no_logic_in_create_state 린트: createState에 로직 넣지 않기

no_logic_in_create_state 린트: createState에 로직 넣지 않기

Flutter의 StatefulWidget에서 createState() 메서드에 불필요한 로직을 넣지 않도록 잡아주는 린트(lint) 규칙이에요. 상태 접근은 widget 필드를 통해 하는 게 권장되기 때문에, createState()는 단순히 State 객체를 만들어 반환만 하라는 규칙이랍니다.

출처: no_logic_in_create_state

본문

설명

createState()에 어떤 로직도 넣지 마세요(Flutter 관련 규칙이에요).

createState()의 구현은 State 객체의 새 인스턴스를 반환하는 것 외에는 아무것도 하지 않아야 해요. 상태 접근은 widget 필드를 통해 하는 것이 더 권장되므로, 커스텀 생성자 매개변수를 사용해 State 객체에 데이터를 넘기는 것도 피해야 해요. 나아가 State 생성자는 아무 인자도 받지 않아야 해요.

BAD:

MyState global;

class MyStateful extends StatefulWidget {
  @override
  MyState createState() {
    global = MyState();
    return global;
  }
}
class MyStateful extends StatefulWidget {
  @override
  MyState createState() => MyState()..field = 42;
}
class MyStateful extends StatefulWidget {
  @override
  MyState createState() => MyState(42);
}

GOOD:

class MyStateful extends StatefulWidget {
  @override
  MyState createState() {
    return MyState();
  }
}

전역 변수에 할당하거나, cascade로 필드를 초기화하거나, 생성자에 인자를 넘기는 방식 대신 그냥 새 State 인스턴스를 반환하도록 해주면 돼요.

활성화 방법

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

analysis_options.yaml:

linter:
  rules:
    - no_logic_in_create_state

대신 YAML 맵 문법으로 린트 규칙을 설정한다면, linter > rules 아래에 no_logic_in_create_state: true라고 적어요.

analysis_options.yaml:

linter:
  rules:
    no_logic_in_create_state: true

더 알아보기