반응형
일반적으로 CarouselSlider 위젯을 사용하면 item에 Widget List를 넣고 그만큼 페이지 갯수가 생성된다.
하지만 CarouselSlider.builder 를 이용하면 itemCount를 원하는대로 구성하여 한 페이지에 여러 위젯을 집어넣을 수 있다.
CarouselSlider.builder(
itemCount: (controller.youtubeUrls.length / 2).round(),
// 이 itemBuilder 실행은 페이지를 넘길때마다 실행된다.
// 그래서 autoPlay 기능을 넣는다면 성능을 위해서는 builder를 사용하지 않는 편이 좋을 것 같다.
itemBuilder: (BuildContext context, int index, int realIndex) {
// 한 페이지에 2개를 넣기 위해 따로 index를 생성한다.
// realIndex를 이용할 수도 있지 않을까 싶어서 log를 찍어봤지만 그저 index+10000 값이 나온다.
// 공식 문서에서도 별 말 없는거 보면 왜 있는지는 잘 모르겠음.
final curIndex = index * 2;
return Flex(direction: Axis.horizontal, children: [
Flexible(
flex: 1,
child: CustomWidget(itemList[index]),
SizedBox(
width: 4,
),
Flexible(
flex: 1,
child: controller.itemList.length == curIndex+1
? SizedBox()
: CustomWidget(itemList[index+1]))
// curIndex를 이용하여 홀수일때는 마지막 짝수번째에 빈 공간을 만들어준다.
]);
},
options: CarouselOptions(
// 기본 Ratio가 16/9 이므로 32/9로 맞춰준다.
// 가운데 SizedBox가 존재하기는 하지만 워낙 작은 숫자이므로 이렇게 설정했다.
// 원한다면 더 비율을 키워도 괜찮음.
aspectRatio: 32 / 9,
disableCenter: false,
viewportFraction: 1))
이렇게 builder의 itemBuilder 메소드에 커스텀 index 변수를 생성해서 이용하는 방법을 택했다.
주석에 적어놓은대로 autoPlay를 쓰지 않는다면 builder가 나쁘지 않지만
autoPlay가 있고, 갯수가 많다면 쓰지 않는게 빌드가 쓸데없이 많이 되는 걸 막는 방법일 듯 하다.
반응형
'APP > Flutter' 카테고리의 다른 글
[Flutter / 플러터] 내비게이션 바, 탭 바 사용하기 (Tab Bar) (0) | 2023.06.04 |
---|---|
Flutter) Widget 생성 Class vs Function (0) | 2022.05.08 |
flutter) artemis 패키지 GraphQL LocalTime to Dart DateTime 변환 오류 (0) | 2022.04.24 |
Flutter 네이버 로그인 & 카카오 로그인iOS 안될 때 (0) | 2022.04.12 |
Flutter webview 플러터에서 웹뷰 사용하기 (webview_flutter) (0) | 2021.12.09 |