[Flutter] ScrollController 화면 최하단으로 이동하기

euni·2025년 6월 11일

Flutter

목록 보기
12/12

개발하게 된 배경

회사에서 프로젝트를 진행하던 도중, 어떤 화면에 진입했을때 화면이 다 빌드되고 나서 화면의 최하단으로 스크롤이 이동해야하는 케이스가 생겨 알아보다가 정리하게 되었다


해야하는 작업

  1. 위젯이 다 빌드 되었는지 확인 - 스크롤 컨트롤러가 위젯에 attach 됐는지 확인하기 위해
  2. 스크롤 컨트롤러 position 이동

1. 위젯이 다 빌드 되었는지 확인
WidgetsBinding.instance.addPostFrameCallback((_) {});

  • 위젯 트리가 다 빌드 되고, 첫 프레임이 렌더링된 후 한번만 실행되는 콜백 함수

2. 스크롤 컨트롤러 position 이동
scrollController.animateTo(
scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 1000),
curve: Curves.easeInOut,
);

  • position.maxScrollExtent : 스크롤이 닿을수 있는 전체 영역 중에서 가장 아래(끝)의 위치 값
  • anmateTo() : 스크롤을 해당되는 위치까지 이동시켜주는 함수

전체 코드

  
  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

  • WidgetsFlutterBinding
    runApp() 호출 시 자동으로 생성되어, Flutter 앱의 위젯 바인딩과 렌더링 시스템을 초기화하는 클래스
    일반적인 경우에는 명시적으로 사용할 필요가 없지만, main() 함수에서 비동기 작업(예: Firebase 초기화 등)을 수행해야 할 때는,
    WidgetsFlutterBinding.ensureInitialized()를 호출해 바인딩을 수동으로 초기화해야 한다.
    이 메서드는 바인딩이 아직 없다면 새로 생성하고, 이미 있는 경우 기존 인스턴스를 반환하여 Flutter 엔진이 완전히 초기화되도록 보장한다.
profile
플러터 개발자 👩🏻‍💻

0개의 댓글