[Flutter] addPostFrameCallback이 호출되지 않는다면? / GetX에서 onReady() 함수가 실행되지 않는다면?

sumong·2023년 1월 8일
0

Flutter 오류 대응

목록 보기
15/15
post-thumbnail

💡 이 글에서 제시하는 해결책은 GetX를 쓰는 프로젝트에서 특정 화면에 대해 onReady() 함수가 실행되지 않을 때에도 적용할 수 있습니다.
(이는 GetX의 onReady() 함수 또한 onInit() 안에서 addPostFrameCallback을 통해 실행되기 때문입니다.)

출처 : Flutter : addPostFrameCallback callback not called


원인

  • 위 문제는 Flutter가 오류가 발생하는 해당 화면에 대해서 새 프레임을 그리지 않고 있고, 이로 인해 addPostFrameCallback이 실행되지 않기 때문에 발생합니다.
    → 이 문제를 해결하려면, 새 프레임을 그리도록 ‘강제’해야 합니다.
  • ensureVisualUpdate() 메서드는 새 프레임을 그리도록 스케쥴링하는 역할을 하며, 이를 통해 강제적으로 새 프레임을 그리도록 합니다.
    → 이 함수가 실행되면, 새로운 프레임이 그려지기 때문에 자연스럽게 addPostFrameCallback이 실행됩니다.

해결책

오류가 발생하는 부분에 WidgetsBinding.instance.ensureVisualUpdate() 를 추가합니다.

  • 기본 사용법
WidgetsBinding.instance.ensureVisualUpdate();
    
WidgetsBinding.instance!.addPostFrameCallback((timestamp) {
  ...
});
  • 만약 GetX에서 onReady()가 호출되지 않는 문제라면, WidgetsBinding.instance.ensureVisualUpdate()onInit()의 맨 끝에 넣어주면 됩니다.

void onInit() {
  ...
  // 아래 1줄 추가.
  WidgetsBinding.instance.ensureVisualUpdate();
    
  super.onInit();
}
    

void onReady() {
  super.onReady();
  ...
}
profile
Flutter 메인의 풀스택 개발자 / 한양대 컴퓨터소프트웨어학과, HUHS의 화석

0개의 댓글