모바일 개발하는 자바리안의 메모장

Flutter - WidgetsFlutterBinding.ensureInitialized()을 이용한 Main함수 Binding 본문

Flutter

Flutter - WidgetsFlutterBinding.ensureInitialized()을 이용한 Main함수 Binding

자바리안 2022. 11. 6. 15:15
반응형

메인 함수에서 WidgetsFlutterBinding.ensureInitialized() 함수를 사용하는 경우가 많다.

지금까진 해당 함수를 직접 작성할 일이 없어 그냥 지나치다가 이번에 새로운 프로젝트를 시작하며 해당 함수의 역할을 알게되었다.

 

해당 함수는 시작점인 main() 함수에서 비동기 처리 코드를 사용하기에 앞서, 미리 flutter 엔진과 widget을 바운딩 처리해준다.

 

우선 아래 코드를 실행할 경우 발생하는 코드를 보자 :

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  MyApp({super.key}) {
    init();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MainPage(),
    );
  }

  void init() async {
    await AuthCodeClient.instance.request();
  }
}

대충 바인딩이 초기화되지 않았단 내용이며 아주 친절하게 해결 방법도 공유해준다.

runApp()을 활용하라는 제안도 있지만, 실행하는 앱의 생성자에서 비동기 처리를해서 그런지 바인딩 초기화가 안된 상태이다.

 

이런 상황에 비동기 호출 전에 마법의 코드 WidgetsFlutterBinding.ensureInitialized()를 추가해주면 모든 문제가 해결된다.

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}
 ... 
}
반응형
Comments