Carousels are a popular way to showcase content like images, text, or custom widgets in a sliding format. Flutter provides several ways to implement carousel views, offering flexibility for different use cases. In this blog post, we will explore how to create a CarouselView
in Flutter with various examples and implementations.
1. Using the carousel_slider
Package
The carousel_slider
package is one of the most popular options for creating carousels in Flutter.
Installation
Add the package to your pubspec.yaml
:
dependencies: carousel_slider: ^4.2.0
Run flutter pub get
to install the package.
Basic Example
import 'package:flutter/material.dart'; import 'package:carousel_slider/carousel_slider.dart'; class BasicCarousel extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Basic Carousel')), body: CarouselSlider( options: CarouselOptions( height: 200.0, autoPlay: true, enlargeCenterPage: true, ), items: [ 'assets/image1.jpg', 'assets/image2.jpg', 'assets/image3.jpg', ].map((imagePath) { return Builder( builder: (BuildContext context) { return Container( width: MediaQuery.of(context).size.width, margin: EdgeInsets.symmetric(horizontal: 5.0), decoration: BoxDecoration(color: Colors.amber), child: Image.asset(imagePath, fit: BoxFit.cover), ); }, ); }).toList(), ), ); } }
Key Features
- AutoPlay: Automatically cycles through the items.
- Enlarge Center Page: Highlights the centered item.
- Custom Animations: Supports easing and custom transitions.
2. Custom Carousel with PageView
Flutter’s built-in PageView
widget can be used to create a highly customizable carousel without third-party libraries.
Example
import 'package:flutter/material.dart'; class CustomCarousel extends StatelessWidget { final List<String> items = [ 'Page 1', 'Page 2', 'Page 3', ]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Custom Carousel')), body: PageView.builder( itemCount: items.length, controller: PageController(viewportFraction: 0.8), itemBuilder: (context, index) { return Container( margin: EdgeInsets.all(10.0), color: Colors.blueAccent, child: Center( child: Text( items[index], style: TextStyle(color: Colors.white, fontSize: 24.0), ), ), ); }, ), ); } }
Key Features
- Fully customizable design.
- Can be extended to include animations, gestures, and more.
3. Horizontal Scrolling List as Carousel
If you don’t need advanced carousel features, a horizontally scrolling list can be a simple solution.
Example
import 'package:flutter/material.dart'; class HorizontalCarousel extends StatelessWidget { final List<Color> colors = [Colors.red, Colors.green, Colors.blue, Colors.yellow]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Horizontal Carousel')), body: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( children: colors.map((color) { return Container( width: 200.0, height: 200.0, margin: EdgeInsets.all(10.0), color: color, ); }).toList(), ), ), ); } }
Key Features
- Lightweight and simple.
- Ideal for static content.
4. Carousel with Indicator
Adding indicators to show the current position of the carousel is a common feature.
Example with carousel_slider
import 'package:flutter/material.dart'; import 'package:carousel_slider/carousel_slider.dart'; class CarouselWithIndicator extends StatefulWidget { @override _CarouselWithIndicatorState createState() => _CarouselWithIndicatorState(); } class _CarouselWithIndicatorState extends State<CarouselWithIndicator> { int _currentIndex = 0; final List<String> images = [ 'assets/image1.jpg', 'assets/image2.jpg', 'assets/image3.jpg', ]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Carousel with Indicator')), body: Column( children: [ CarouselSlider( items: images.map((imagePath) { return Image.asset(imagePath, fit: BoxFit.cover); }).toList(), options: CarouselOptions( height: 200.0, autoPlay: true, enlargeCenterPage: true, onPageChanged: (index, reason) { setState(() { _currentIndex = index; }); }, ), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: images.asMap().entries.map((entry) { return GestureDetector( onTap: () => setState(() { _currentIndex = entry.key; }), child: Container( width: 8.0, height: 8.0, margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 4.0), decoration: BoxDecoration( shape: BoxShape.circle, color: (Theme.of(context).brightness == Brightness.dark ? Colors.white : Colors.black) .withOpacity(_currentIndex == entry.key ? 0.9 : 0.4), ), ), ); }).toList(), ), ], ), ); } }
Conclusion
Flutter’s flexibility allows you to create carousels tailored to your needs, from simple horizontal scrolls to fully-featured sliders with animations and indicators. Whether you’re using third-party packages like carousel_slider
or building a custom implementation, you have all the tools to make your application stand out.
Try out these examples, tweak them to match your design, and create stunning carousels for your next Flutter project!