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를 구성한 것입니다.
_onRefresh 함수:
Future.delayed
를 사용하여 5초 동안 지연시킵니다. 실제 사용 시에는 이 지연 시간 동안 새로운 데이터를 가져오는 작업을 수행할 수 있습니다. _onRefresh
함수가 종료되면 RefreshIndicator
애니메이션은 종료됩니다.build 함수:
RefreshIndicator
: 아래로 드래그하면 새로고침 아이콘을 보여주고 onRefresh
콜백을 호출하는 위젯입니다.
displacement
: 새로고침 아이콘과 RefreshIndicator
의 자식 위젯과의 거리입니다.
edgeOffset
: RefreshIndicator
의 위치를 조절합니다.
color
: 새로고침 아이콘의 색상입니다.
PageView.builder
: 수직으로 스크롤 가능한 페이지 뷰를 생성합니다.
controller
: 페이지 뷰의 컨트롤러입니다. 이 예에서는 _pageController
를 사용하는 것으로 보이나, 해당 코드에서는 정의되어 있지 않습니다.scrollDirection
: 페이지 뷰의 스크롤 방향입니다. 여기서는 수직으로 설정되었습니다.onPageChanged
: 페이지가 변경될 때마다 호출되는 콜백 함수입니다. _onPageChanged
가 호출되는 것으로 보이나, 해당 코드에서는 정의되어 있지 않습니다.itemCount
: 페이지 뷰에 표시될 항목의 수입니다. 이 예에서는 _itemCount
를 사용하는 것으로 보이나, 해당 코드에서는 정의되어 있지 않습니다.itemBuilder
: 각 페이지에 표시될 위젯을 빌드하는 함수입니다. 여기서는 VideoPost
위젯이 사용되며, onVideoFinished
및 index
파라미터를 전달합니다.이렇게 구성된 위젯을 통해 사용자는 수직으로 스크롤하여 동영상을 볼 수 있으며, 위로 드래그하여 콘텐츠를 새로고침할 수 있습니다.
RefreshIndicator
는 Flutter에서 제공하는 위젯으로, 스크롤 가능한 위젯을 아래로 끌어당기면 나타나는 원형 새로고침 프로그레스 인디케이터를 구현하기 위해 사용됩니다. 주로 새로운 데이터를 가져오기 위한 "pull-to-refresh" 기능을 제공하기 위해 사용됩니다.
RefreshIndicator
의 주요 특징 및 사용 방법은 다음과 같습니다:
onRefresh:
Future<void>
타입을 반환해야 합니다. 이 Future가 완료되면 인디케이터 애니메이션이 종료됩니다.child:
ListView
, GridView
, CustomScrollView
, SingleChildScrollView
와 같은 스크롤 가능한 위젯이 이 자리에 위치합니다.RefreshIndicator
는 자식 위젯이 스크롤 가능해야 작동합니다.color, backgroundColor:
color
는 인디케이터의 색상을, backgroundColor
는 인디케이터 뒤의 배경 색상을 지정하는 데 사용됩니다.displacement:
40.0
입니다.semanticsLabel, semanticsValue:
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()
함수를 호출하여 데이터를 새로고침합니다.