[Flutter] ListView 스크롤 맨 밑으로 고정하기

mason.98·2023년 5월 10일
0

Flutter

목록 보기
6/8

플러터에서 리스트뷰를 스크롤 맨 밑으로 고정하여 렌더링하고 싶어서
아래 코드와 같은 흐름으로 작성했더니 오류가 발생했다.

기존코드

  
  void initState() {
    super.initState();
     // initState에서 스크롤 맨 밑으로 이동
     _scrollController
  		.jumpTo(_scrollController.position.maxScrollExtent);
  }
  
  
  Widget build(BuildContext context) {
    return ListView.builder(
      controller: _scrollController, // 스크롤 컨트롤러
      itemCount: 100,
      itemBuilder: (BuildContext context, int index) {
        return ListTile(
          title: Text('Item $index'),
        );
      },
    );
  }

에러내용

_AssertionError ('package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 107 pos 12: '_positions.isNotEmpty': ScrollController not attached to any scroll views.)

스크롤컨트롤러가 리스트뷰를 못 찾았다는 뜻인거 같다.


해결방법

  ...
  
  
  Widget build(BuildContext context) {
  	// 렌더링 된 후 즉시, 해당 함수 실행하여 스크롤 맨 밑으로 이동
    SchedulerBinding.instance!.addPostFrameCallback((_) {
      _scrollController
      	.jumpTo(_scrollController.position.maxScrollExtent);
    });
    
    return ListView.builder(
      controller: _scrollController, // 스크롤 컨트롤러
      itemCount: 100,
      itemBuilder: (BuildContext context, int index) {
        return ListTile(
          title: Text('Item $index'),
        );
      },
    );
  }

addPostFrameCallback 메소드는 리스트뷰(위젯)가 렌더링 된 후 즉시 실행하는 메소드이다.
따라서 initState로 스크롤컨트롤러를 초기화 하고,
리스트뷰가 렌더링 된 후에, 스크롤 맨 밑으로 이동이 되었다!


1
2

profile
wannabe---ing

0개의 댓글