initState

박동규·2023년 11월 22일
0

flutter

목록 보기
3/4

 initState 메서드는 위젯이 화면에 렌더링되기 전, 즉 위젯이 위젯 트리에 삽입된 직후에 실행됩니다. 이 단계는 위젯의 생명주기에서 한 번만 호출되며, 위젯이 생성될 때 초기 상태를 설정하는 데 사용됩니다.

initState는 다음과 같은 목적으로 사용됩니다:

  1. 초기 데이터 설정: 위접의 초기 상태를 설정하거나, 위젯에 필요한 초기 데이터를 로드합니다.
  2. 리스너 및 구독 설정: 이벤트 리스너나 스트림 구독을 설정하여, 특정 이벤트가 발생할 때 위젯이 반응할 수 있도록 합니다.

initState는 build 메서드가 처음 호출되기 전에 실행되기 때문에, 이 시점에서는 아직 위젯이 화면에 그려지지 않았습니다. 그렇기 때문에 이 메서드 내에서는 위젯의 레이아웃이나 다른 화면 요소에 접근하는 것이 불가능합니다.

initState에서 설정된 초기 상태는 이후 build 메서드 호출 시 사용되며, build 메서드는 위젯이 화면에 그려질 UI를 구성하는 데 사용됩니다.

initState 메서드에서 많은 시간을 필요로 하는 작업을 수행하는 경우, 실제로는 좋은 접근 방법이 아닙니다. initState동기적으로 실행되므로, 여기서 시간이 많이 소요되는 작업을 수행하면 위젯의 렌더링이 차단될 수 있습니다. 즉, 해당 작업이 완료될 때까지 화면에 위젯이 나타나지 않을 수 있습니다.

Flutter에서는 다음과 같은 방법으로 이 문제를 해결할 수 있습니다:

  1. 비동기 작업 사용initState에서 직접 시간이 많이 소요되는 작업을 시작하지 말고, 대신 Future.delayed와 같은 비동기 함수를 사용하여 작업을 시작합니다. 이렇게 하면 initState는 즉시 완료되고, 비동기 작업은 별도로 진행됩니다.
  2. 로딩 인디케이터: 시간이 많이 소요되는 작업이 진행되는 동안 사용자에게 로딩 인디케이터나 진행 상황을 표시하는 UI를 제공할 수 있습니다. 이는 사용자 경험을 향상시키는 좋은 방법입니다.
  3. 분할 초기화: 가능한 경우 초기화 작업을 여러 단계로 나누어 initState에서는 가장 필수적인 부분만 수행하고, 나머지는 나중에 또는 다른 메서드에서 수행하는 방식을 고려할 수 있습니다.

initState에서 시간이 많이 소요되는 작업을 피하는 것은 애플리케이션의 반응성과 사용자 경험을 유지하는 데 중요합니다. 따라서, 이러한 작업은 가능한 한 비동기적으로 처리하는 것이 바람직합니다.

initState() 내에서 super.initState()

  • 순서: initState() 메서드에서 super.initState()항상 메서드의 시작 부분에서 호출해야 합니다.
  • 이유: super.initState() 호출은 상위 클래스의 초기화 로직을 실행합니다. 이것을 가장 먼저 호출함으로써, 상위 클래스에서 설정된 초기화가 완료된 후에 하위 클래스(즉, 당신의 위젯 클래스)의 초기화 로직을 실행할 수 있습니다.
  • 위험: super.initState()를 호출하기 전에 다른 로직을 실행하면, 상위 클래스의 초기화가 완료되지 않은 상태에서 위젯의 초기화 코드가 실행되어 예상치 못한 문제가 발생할 수 있습니다.
profile
내가 원하는 것을 만들자

0개의 댓글