stun_slider 1.1.0 copy "stun_slider: ^1.1.0" to clipboard
stun_slider: ^1.1.0 copied to clipboard

A custom Flutter slider widget with dynamic page sizes in both dimensions, enabling smooth and adaptable user interaction.

example/lib/main.dart

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:stun_slider/stun_slider.dart';
import 'package:example/slider_item.dart';
import 'package:example/slider_item_widget.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final StunSliderController _controller;

  final List<SliderItem> _items = [
    SliderItem.random(),
    SliderItem.random(),
    SliderItem.random(),
  ];

  @override
  void initState() {
    super.initState();
    _controller = StunSliderController(PageController());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Stun Slider Demo App'),
      ),
      floatingActionButton: Row(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            child: const Icon(Icons.add),
            onPressed: () {
              _items.add(SliderItem.random());
              _controller.jumpToIndex(_items.length - 1);

              setState(() {});
            },
          ),
          const SizedBox(width: 16),
          FloatingActionButton(
            child: const Icon(Icons.minimize),
            onPressed: () {
              final random = Random();
              _items.removeAt(random.nextInt(_items.length));
              _controller.jumpToIndex(_items.length - 1);
              setState(() {});
            },
          ),
        ],
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          StunSlider.builder(
            itemCount: _items.length,
            itemBuilder: (_, index) {
              return SliderItemWidget(
                item: _items[index],
              );
            },
            controller: _controller,
          ),
          const SizedBox(height: 16),
          Row(
            mainAxisSize: MainAxisSize.min,
            children: [
              StunSliderNavButton.prev(
                itemCount: _items.length,
                controller: _controller,
              ),
              StunSliderPagination(
                controller: _controller,
                itemBuilder: (context, index, isActive) {
                  return Container(
                    height: 40,
                    width: 40,
                    color: isActive ? Colors.amber : Colors.grey,
                    child: Center(child: Text('$index')),
                  );
                },
                itemCount: _items.length,
              ),
              StunSliderNavButton.next(
                itemCount: _items.length,
                controller: _controller,
              ),
            ],
          ),
          const SizedBox(height: 16),
          StunSliderHelper(
            controller: _controller,
            itemBuilder: (_, index) {
              return Text('${index + 1} / ${_items.length}');
            },
          ),
        ],
      ),
    );
  }
}
5
likes
0
points
36
downloads

Publisher

unverified uploader

Weekly Downloads

A custom Flutter slider widget with dynamic page sizes in both dimensions, enabling smooth and adaptable user interaction.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on stun_slider