no_logic_in_create_state 린트: createState에 로직 넣지 않기
no_logic_in_create_state 린트: createState에 로직 넣지 않기
Flutter의 StatefulWidget에서 createState() 메서드에 불필요한 로직을 넣지 않도록 잡아주는 린트(lint) 규칙이에요. 상태 접근은 widget 필드를 통해 하는 게 권장되기 때문에, createState()는 단순히 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