[flutter] carousel_slider에 페이징 추가하기

Flutter에서 Carousel Slider는 이미지나 위젯을 좌우로 스와이프하는 기능을 제공하는 간단하고 유용한 패키지입니다. 그러나 기본적으로 Carousel Slider는 현재 페이지를 나타내는 페이징을 제공하지 않습니다. 이 문제를 해결하기 위해 페이징 기능을 Carousel Slider에 추가하는 방법에 대해 알아보겠습니다.

패키지 가져오기

페이징을 추가하기 위해 우선 Carousel Slider 패키지를 Flutter 프로젝트에 추가해야 합니다. pubspec.yaml 파일에 다음의 의존성을 추가합니다:

dependencies:
  carousel_slider: ^3.0.0

다음은 Carousel Slider에 페이징을 추가하는 예제 코드입니다:

import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';

class MyCarouselSlider extends StatefulWidget {
  @override
  _MyCarouselSliderState createState() => _MyCarouselSliderState();
}

class _MyCarouselSliderState extends State<MyCarouselSlider> {
  int _currentIndex = 0;

  final List<String> _images = [
    'image1.jpg',
    'image2.jpg',
    'image3.jpg',
  ];

  @override
  Widget build(BuildContext context) {
    return CarouselSlider(
      items: _images.map((image) {
        return Builder(
          builder: (BuildContext context) {
            return Container(
              margin: EdgeInsets.symmetric(horizontal: 5.0),
              child: Image.asset(
                image,
                fit: BoxFit.cover,
              ),
            );
          },
        );
      }).toList(),
      options: CarouselOptions(
        height: 200.0,
        initialPage: 0,
        onPageChanged: (index, _) {
          setState(() {
            _currentIndex = index;
          });
        },
      ),
    );
  }
}

위의 코드에서 Carousel Slider 클래스를 사용하여 슬라이더를 생성하고, 각 이미지를 Container 안에 위치시키고 페이징 개수에 따라 현재 페이지를 업데이트합니다. Carousel Options 객체를 사용하여 초기 페이지와 페이지가 변경될 때 호출되는 콜백 함수를 설정합니다.

페이징 표시하기

페이지 지시자를 표시하려면 Carousel Slider와 함께 ListView 또는 Row를 사용하여 페이지가 나타나도록 할 수 있습니다. 예를 들어, Row 위젯을 사용하여 선택된 페이지를 강조하는 작은 점을 만들 수 있습니다:

Row(
  mainAxisAlignment: MainAxisAlignment.center,
  children: _images.map((image) {
    int index = _images.indexOf(image);
    return Container(
      width: 10,
      height: 10,
      margin: EdgeInsets.symmetric(vertical: 10, horizontal: 2),
      decoration: BoxDecoration(
        shape: BoxShape.circle,
        color: _currentIndex == index ? Colors.black : Colors.grey,
      ),
    );
  }).toList(),
);

위의 코드에서는 Row 위젯을 사용하여 점을 나열하고, _currentIndex와 현재 인덱스가 일치하는지 확인하여 선택된 페이지를 강조합니다.

결론

위에서 설명한 방법을 따라 Carousel Slider에 페이징을 추가할 수 있습니다. 페이징을 추가하면 사용자가 현재 페이지를 파악하기 쉬워지므로 UX를 향상시킬 수 있습니다. Carousel Slider는 매우 유연한 라이브러리이므로, 필요에 따라 다양한 사용자 정의를 적용할 수 있습니다.


참고 자료