Flutter TextEditingController 와 초기화의 관계

이건선·2023년 7월 17일
0

Flutter

목록 보기
14/30

초기화 여부에 따른 initState()사용법

...

 // 코드 1
 final newTodoController = TextEditingController();

  
  void dispose() {
    newTodoController.dispose();
    super.dispose();
  }
  
...
...

// 코드 2
  late final TextEditingController textController;

  
  void initState() {
    // TODO: implement initState
    super.initState();
    textController = TextEditingController();
  }

  
  void dispose() {
    textController.dispose();
    // TODO: implement dispose
    super.dispose();
  }
  
...

코드 1

TextEditingController는 클래스의 최상단에 final 키워드로 선언되어 있습니다.

final로 선언하고 있어서, initState() 메서드에서 또 다시 초기화하려고 하면 오류가 발생합니다. 그렇기 때문에 initState()에서 다시 초기화할 필요는 없습니다.

final은 한 번 초기화된 후에는 변경이 불가능하다는 것을 의미합니다. 이렇게 되면, 컨트롤러는 위젯이 생성될 때 초기화되고 dispose() 메서드에서 해제됩니다. 이 방법은 상태가 변경되지 않을 때, 즉 위젯이 재구성되거나 다시 빌드될 때마다 TextEditingController가 초기화되지 않아도 될 때 유용합니다.

코드 2

late final로 선언된 변수는 초기화되기 전에는 사용할 수 없습니다. 따라서 이 변수를 사용하기 전에 반드시 초기화해야 합니다.

TextEditingController가 initState()에서 초기화되고 dispose()에서 해제됩니다.

initState()는 위젯 생명주기에서 한 번만 호출되므로, 이는 위젯이 처음 생성될 때 TextEditingController가 초기화되는 것을 보장합니다. 이 방법은 위젯의 상태가 변경될 가능성이 있을 때 좋습니다. 즉, 이 방법을 사용하면 TextEditingController가 위젯의 생명주기와 동일하게 유지되므로 안전하게 컨트롤러를 관리할 수 있습니다.

profile
멋지게 기록하자

0개의 댓글