RefreshIndicator

샤워실의 바보·2024년 2월 11일
0
post-thumbnail
Future<void> _onRefresh() {
    return Future.delayed(
      const Duration(seconds: 5),
    );
  }

  
  Widget build(BuildContext context) {
    return RefreshIndicator(
      onRefresh: _onRefresh,
      displacement: 50,
      edgeOffset: 20,
      color: Theme.of(context).primaryColor,
      child: PageView.builder(
        controller: _pageController,
        scrollDirection: Axis.vertical,
        onPageChanged: _onPageChanged,
        itemCount: _itemCount,
        itemBuilder: (context, index) => VideoPost(
          onVideoFinished: _onVideoFinished,
          index: index,
        ),
      ),
    );
  }
}

여기서 제시된 코드는 RefreshIndicator 위젯과 PageView.builder를 사용하여 페이지별로 동영상을 표시하는 UI를 구성한 것입니다.

  1. _onRefresh 함수:

    • Future.delayed를 사용하여 5초 동안 지연시킵니다. 실제 사용 시에는 이 지연 시간 동안 새로운 데이터를 가져오는 작업을 수행할 수 있습니다. _onRefresh 함수가 종료되면 RefreshIndicator 애니메이션은 종료됩니다.
  2. build 함수:

    • RefreshIndicator: 아래로 드래그하면 새로고침 아이콘을 보여주고 onRefresh 콜백을 호출하는 위젯입니다.

    • displacement: 새로고침 아이콘과 RefreshIndicator의 자식 위젯과의 거리입니다.

    • edgeOffset: RefreshIndicator의 위치를 조절합니다.

    • color: 새로고침 아이콘의 색상입니다.

    • PageView.builder: 수직으로 스크롤 가능한 페이지 뷰를 생성합니다.

      • controller: 페이지 뷰의 컨트롤러입니다. 이 예에서는 _pageController를 사용하는 것으로 보이나, 해당 코드에서는 정의되어 있지 않습니다.
      • scrollDirection: 페이지 뷰의 스크롤 방향입니다. 여기서는 수직으로 설정되었습니다.
      • onPageChanged: 페이지가 변경될 때마다 호출되는 콜백 함수입니다. _onPageChanged가 호출되는 것으로 보이나, 해당 코드에서는 정의되어 있지 않습니다.
      • itemCount: 페이지 뷰에 표시될 항목의 수입니다. 이 예에서는 _itemCount를 사용하는 것으로 보이나, 해당 코드에서는 정의되어 있지 않습니다.
      • itemBuilder: 각 페이지에 표시될 위젯을 빌드하는 함수입니다. 여기서는 VideoPost 위젯이 사용되며, onVideoFinishedindex 파라미터를 전달합니다.

이렇게 구성된 위젯을 통해 사용자는 수직으로 스크롤하여 동영상을 볼 수 있으며, 위로 드래그하여 콘텐츠를 새로고침할 수 있습니다.

RefreshIndicator는 Flutter에서 제공하는 위젯으로, 스크롤 가능한 위젯을 아래로 끌어당기면 나타나는 원형 새로고침 프로그레스 인디케이터를 구현하기 위해 사용됩니다. 주로 새로운 데이터를 가져오기 위한 "pull-to-refresh" 기능을 제공하기 위해 사용됩니다.

RefreshIndicator의 주요 특징 및 사용 방법은 다음과 같습니다:

  1. onRefresh:

    • 이 콜백은 필수로 제공되어야 합니다.
    • 사용자가 리스트나 스크롤 뷰를 아래로 끌어당겼을 때 호출됩니다.
    • Future<void> 타입을 반환해야 합니다. 이 Future가 완료되면 인디케이터 애니메이션이 종료됩니다.
  2. child:

    • 일반적으로 ListView, GridView, CustomScrollView, SingleChildScrollView와 같은 스크롤 가능한 위젯이 이 자리에 위치합니다.
    • RefreshIndicator는 자식 위젯이 스크롤 가능해야 작동합니다.
  3. color, backgroundColor:

    • color는 인디케이터의 색상을, backgroundColor는 인디케이터 뒤의 배경 색상을 지정하는 데 사용됩니다.
  4. displacement:

    • 인디케이터가 얼마나 아래로 위치할지를 지정하는 속성입니다. 기본값은 40.0 입니다.
  5. semanticsLabel, semanticsValue:

    • 접근성을 위해 제공되는 레이블 및 값을 설정합니다.
  6. edgeOffset:

    • RefreshIndicator가 스크롤 뷰의 상단에서 얼마나 멀리 떨어져 있을지 지정합니다. 기본적으로 0.0입니다.

예시:

RefreshIndicator(
  onRefresh: () async {
    // 여기에서 데이터를 새로고침하는 로직을 추가합니다.
    await fetchData();
  },
  child: ListView.builder(
    itemCount: items.length,
    itemBuilder: (context, index) {
      return ListTile(title: Text('Item $index'));
    },
  ),
)

이 코드는 ListView의 각 항목에 "Item x"라는 텍스트를 표시하는 간단한 예제입니다. 사용자가 목록을 아래로 드래그하면 onRefresh 콜백이 호출되고, 이 예제에서는 fetchData() 함수를 호출하여 데이터를 새로고침합니다.

profile
공부하는 개발자

0개의 댓글