flutter_custom_caraousel_v2 0.2.0 copy "flutter_custom_caraousel_v2: ^0.2.0" to clipboard
flutter_custom_caraousel_v2: ^0.2.0 copied to clipboard

A customizable carousel for Flutter with Material Design 3 support, multiple layouts and indicator styles.

example/lib/main.dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_custom_caraousel_v2/flutter_custom_caraousel_v2.dart';

part 'presentation/caraousel_page.dart';

void main() {
  runApp(const CarouselDemoApp());
}

// Definisi routes aplikasi
final Map<String, WidgetBuilder> routes = {
  '/': (context) => const CarouselDemoHomePage(),
  '/weighted-carousel': (context) => const WeightedCarouselDemo(),
  '/auto-play': (context) => const AutoPlayDemo(),
  '/indicator-styles': (context) => const IndicatorStylesDemo(),
  '/controller': (context) => const ControllerDemo(),
  '/layout-variations': (context) => const LayoutVariationsDemo(),
  '/custom-demo': (context) => const CustomDemo(),
  '/vertical-carousel': (context) => const VerticalCarouselDemo(),
};

class CarouselDemoApp extends StatelessWidget {
  const CarouselDemoApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Custom Carousel V2 Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      initialRoute: '/',
      routes: routes,
    );
  }
}

class CarouselDemoHomePage extends StatelessWidget {
  const CarouselDemoHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Custom Carousel Demo'),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: ListView(
        padding: const EdgeInsets.all(16),
        children: [
          _buildDemoCard(
            context,
            title: 'Weighted Carousel',
            subtitle: 'Carousel with varying item sizes',
            routeName: '/weighted-carousel',
          ),
          _buildDemoCard(
            context,
            title: 'AutoPlay Demo',
            subtitle: 'Carousel with autoplay feature',
            routeName: '/auto-play',
          ),
          _buildDemoCard(
            context,
            title: 'Indicator Styles',
            subtitle: 'Different types of indicators for carousel',
            routeName: '/indicator-styles',
          ),
          _buildDemoCard(
            context,
            title: 'Controller Demo',
            subtitle: 'Use of controllers for programmatic control',
            routeName: '/controller',
          ),
          _buildDemoCard(
            context,
            title: 'Layout Variations',
            subtitle: 'Multi-browse, Hero, and Full-screen layouts',
            routeName: '/layout-variations',
          ),
          _buildDemoCard(
            context,
            title: 'Custom Demo',
            subtitle: 'Combination of features for special purposes',
            routeName: '/custom-demo',
          ),
          _buildDemoCard(
            context,
            title: 'Vertical Carousel',
            subtitle: 'Carousel with vertical scrolling',
            routeName: '/vertical-carousel',
          ),
        ],
      ),
    );
  }

  Widget _buildDemoCard(
    BuildContext context, {
    required String title,
    required String subtitle,
    required String routeName,
  }) {
    return Card(
      margin: const EdgeInsets.only(bottom: 16),
      clipBehavior: Clip.antiAlias,
      elevation: 2,
      child: InkWell(
        onTap: () => Navigator.pushNamed(context, routeName),
        child: Padding(
          padding: const EdgeInsets.all(16),
          child: Row(
            children: [
              Expanded(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      title,
                      style: Theme.of(context).textTheme.titleLarge,
                    ),
                    const SizedBox(height: 8),
                    Text(
                      subtitle,
                      style: Theme.of(context).textTheme.bodyMedium,
                    ),
                  ],
                ),
              ),
              const Icon(Icons.arrow_forward_ios),
            ],
          ),
        ),
      ),
    );
  }
}

// Data untuk semua demos
class DemoData {
  static final List<CarouselItemData> items = [
    CarouselItemData(
      title: 'Mountains',
      description: 'Pemandangan pegunungan yang indah dengan udara segar',
      color: Colors.blue.shade800,
      icon: Icons.landscape,
    ),
    CarouselItemData(
      title: 'Beach',
      description: 'Pantai dengan pasir putih dan air laut yang jernih',
      color: Colors.orange.shade800,
      icon: Icons.beach_access,
    ),
    CarouselItemData(
      title: 'Forest',
      description: 'Hutan lebat dengan berbagai jenis flora dan fauna',
      color: Colors.green.shade800,
      icon: Icons.forest,
    ),
    CarouselItemData(
      title: 'Desert',
      description: 'Padang pasir luas dengan pemandangan matahari terbenam',
      color: Colors.amber.shade800,
      icon: Icons.terrain,
    ),
    CarouselItemData(
      title: 'City',
      description:
          'Pemandangan kota metropolitan dengan gedung pencakar langit',
      color: Colors.purple.shade800,
      icon: Icons.location_city,
    ),
    CarouselItemData(
      title: 'Lake',
      description: 'Danau tenang dengan air yang jernih di pegunungan',
      color: Colors.teal.shade800,
      icon: Icons.water,
    ),
    CarouselItemData(
      title: 'Modern City',
      description: 'Kota yang modern dan penuh teknologi',
      color: Colors.brown.shade800,
      icon: Icons.location_city_rounded,
    ),
    CarouselItemData(
      title: 'Village',
      description: 'Desa yang asri dengan suasana tenang dan damai',
      color: Colors.lightGreen.shade800,
      icon: Icons.home,
    ),
    CarouselItemData(
      title: 'Cave',
      description: 'Gua tersembunyi yang eksotis dan misterius',
      color: Colors.grey.shade800,
      icon: Icons.cabin,
    ),
    CarouselItemData(
      title: 'River',
      description: 'Sungai yang mengalir jernih di antara hutan tropis',
      color: Colors.indigo.shade800,
      icon: Icons.waves,
    ),
    CarouselItemData(
      title: 'Snow',
      description: 'Wilayah bersalju dengan salju putih yang menyelimuti',
      color: Colors.lightBlue.shade800,
      icon: Icons.ac_unit,
    ),
    CarouselItemData(
      title: 'Island',
      description: 'Pulau terpencil dengan pantai alami dan hutan tropis',
      color: Colors.deepOrange.shade800,
      icon: Icons.public,
    ),
  ];
}

List<Widget> buildCarouselItems(List<CarouselItemData> items,
    {bool isVertical = false}) {
  return items.map((item) {
    return Container(
      margin: const EdgeInsets.all(4),
      decoration: BoxDecoration(
        color: item.color,
        borderRadius: BorderRadius.circular(isVertical ? 12 : 16),
        boxShadow: [
          BoxShadow(
            color: Colors.black.withOpacity(0.2),
            blurRadius: 5,
            offset: const Offset(0, 3),
          ),
        ],
      ),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Icon(
            item.icon,
            size: isVertical ? 50 : 64,
            color: Colors.white,
          ),
          const SizedBox(height: 16),
          Text(
            item.title,
            style: const TextStyle(
              color: Colors.white,
              fontSize: 24,
              fontWeight: FontWeight.bold,
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Text(
              item.description,
              textAlign: TextAlign.center,
              style: TextStyle(
                color: Colors.white.withOpacity(0.9),
                fontSize: 14,
              ),
            ),
          ),
        ],
      ),
    );
  }).toList();
}

// Model data untuk item carousel
class CarouselItemData {
  final String title;
  final String description;
  final Color color;
  final IconData icon;

  CarouselItemData({
    required this.title,
    required this.description,
    required this.color,
    required this.icon,
  });
}
2
likes
160
points
69
downloads

Publisher

verified publisheradpstore.my.id

Weekly Downloads

A customizable carousel for Flutter with Material Design 3 support, multiple layouts and indicator styles.

Homepage
Repository (GitHub)
View/report issues

Topics

#caraousel #flutter-custom-caraousel-v2 #flutter-caraousel #caraousel-slider #custom-caraousel

Documentation

API reference

License

MIT (license)

Dependencies

collection, flutter

More

Packages that depend on flutter_custom_caraousel_v2