회사에서 프로젝트를 진행하던 도중, 어떤 화면에 진입했을때 화면이 다 빌드되고 나서 화면의 최하단으로 스크롤이 이동해야하는 케이스가 생겨 알아보다가 정리하게 되었다
1. 위젯이 다 빌드 되었는지 확인
WidgetsBinding.instance.addPostFrameCallback((_) {});
2. 스크롤 컨트롤러 position 이동
scrollController.animateTo(
scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 1000),
curve: Curves.easeInOut,
);
void onInit() {
isLoading = true;
update();
Future.wait([
loadPost(),
loadCommentList(),
]).then((_) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (moveToComment == true && scrollController.hasClients) {
scrollController.animateTo(
scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 1000),
curve: Curves.easeInOut,
);
}
});
isLoading = false;
update();
});
super.onInit();
}
- WidgetsFlutterBinding
runApp() 호출 시 자동으로 생성되어, Flutter 앱의 위젯 바인딩과 렌더링 시스템을 초기화하는 클래스
일반적인 경우에는 명시적으로 사용할 필요가 없지만, main() 함수에서 비동기 작업(예: Firebase 초기화 등)을 수행해야 할 때는,
WidgetsFlutterBinding.ensureInitialized()를 호출해 바인딩을 수동으로 초기화해야 한다.
이 메서드는 바인딩이 아직 없다면 새로 생성하고, 이미 있는 경우 기존 인스턴스를 반환하여 Flutter 엔진이 완전히 초기화되도록 보장한다.