[flutter] carousel_slider에서 아이템에 맞는 커스텀 위젯 추가하기

flutter의 carousel_slider 패키지는 좌우로 슬라이딩이 가능한 위젯을 제공하는데, 이때 각각의 아이템에 맞는 커스텀 위젯을 추가하고 싶을 때는 어떻게 해야 할까요?

우선 carousel_slider 패키지를 프로젝트에 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 패키지를 추가해주세요.

dependencies:
  carousel_slider: ^4.0.0

또는, 터미널에서 아래 명령어를 실행하여 패키지를 설치할 수도 있습니다.

flutter pub add carousel_slider

다음으로, carousel_slider 위젯을 사용하여 슬라이더를 구현해보겠습니다.

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

class CustomCarouselSlider extends StatelessWidget {
  final List<Widget> items;

  CustomCarouselSlider({required this.items});

  @override
  Widget build(BuildContext context) {
    return CarouselSlider(
      options: CarouselOptions(),
      items: items,
    );
  }
}

위 코드에서 CarouselSlider 위젯을 사용하여 슬라이더를 구현하고 있습니다. items는 각각의 아이템에 해당하는 위젯들의 리스트입니다.

3. 아이템에 맞는 커스텀 위젯 추가하기

이제 각각의 아이템에 맞는 커스텀 위젯을 추가하는 방법을 알아보겠습니다.

class MyCustomItem extends StatelessWidget {
  final String text;

  MyCustomItem({required this.text});

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      height: 200,
      color: Colors.blue,
      child: Center(
        child: Text(
          text,
          style: TextStyle(
            color: Colors.white,
            fontSize: 24,
          ),
        ),
      ),
    );
  }
}

class CustomCarouselSlider extends StatelessWidget {
  final List<String> items;

  CustomCarouselSlider({required this.items});

  @override
  Widget build(BuildContext context) {
    return CarouselSlider(
      options: CarouselOptions(),
      items: items.map((item) => MyCustomItem(text: item)).toList(),
    );
  }
}

위 코드에서 MyCustomItem 위젯은 각각의 아이템에 맞는 커스텀 위젯입니다. text라는 속성을 받아서 해당하는 텍스트를 보여줍니다.

CustomCarouselSlider 위젯에서는 items 리스트의 각각의 요소를 MyCustomItem 위젯으로 변환하여 슬라이더에 추가하는 방식으로 커스텀 위젯을 추가하고 있습니다.

결론

위와 같이 carousel_slider 패키지를 사용하여 각각의 아이템에 맞는 커스텀 위젯을 추가할 수 있습니다. 이를 활용하여 다양한 슬라이더 형태의 인터페이스를 구현할 수 있습니다.

프로젝트에서 필요한 커스텀 위젯을 만들어서 carousel_slider를 사용해보세요. 좀 더 흥미로운 사용자 인터페이스를 구현할 수 있을 것입니다!

참고 자료