搜索分类、插件与代码仓

carousel_slider_plus 封面
插件详情v7.1.2

carousel_slider_plus

一个轮播图滑块小部件,支持无限滚动和自定义子部件。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
4.3万
喜欢数
97
Pub 分数
160

安装插件

flutter pub add carousel_slider_plus

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个用于创建流畅、可自定义的轮播滑块的 Flutter 小部件,支持无限滚动和自定义子小部件。非常适合以视觉上吸引人的方式在水平或垂直可滚动布局中展示图片、卡片或其他内容。该包轻量级,可无缝集成到多个平台的应用程序中,包括移动设备、网页和桌面端。它允许开发者轻松配置指示器、自动播放和滑动手势,以提升用户体验。

适合场景

  • 显示图像画廊
  • 展示产品轮播
  • 创建入门屏幕
  • 展示精选内容
  • 构建交互式滑块
  • 突出显示促销横幅

主要特点

  • 无限滚动支持
  • 可自定义的子部件
  • 自动播放功能
  • 指标自定义
  • 跨平台兼容性
  • 流畅的动画

适合对象

  • 移动应用开发者
  • Web应用程序创建者
  • 桌面应用程序集成商
  • UI/UX 设计师
  • 电子商务应用
  • 入门屏幕实现

使用建议

  • 可能需要针对大型数据集进行优化
  • 内置样式选项有限
  • 大量子部件带来的性能影响
  • 不适合复杂的嵌套布局
  • 需要手动处理点击事件
  • 依赖外部依赖项以实现高级功能

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

carousel_slider_plus

A carousel slider widget.

This package is fork of carousel_slider which is not actively maintained.

pub package

likes popularity pub points



Migrating from carousel_slider

In this fork some of the namings are changed. So follow this below guides to migrate over this new package.

Please make sure to change the import statement
Before
import "package:carousel_slider/carousel_slider.dart;
After
import 'package:carousel_slider_plus/carousel_slider_plus.dart';
The parameter name to pass controller in CarouselSlider is now changed to controller from carouselController.
Before
CarouselSlider(
  carouselController: _controller,
  // Rest of the code
),
After
CarouselSlider(
  controller: _controller,
  // Rest of the code
),

Features

  • Infinite scroll
  • Custom child widgets
  • Auto play

Live preview

https://kishan-dhankecha.github.io/carousel-slider-plus-gh-pages/

Note: this page is built with flutter-web. For a better user experience, please use a mobile device to open this link.

Installation

Add latest version of carousel_slider_plus to your pubspec.yaml dependencies. And import it:

import 'package:carousel_slider_plus/carousel_slider_plus.dart';

How to use

Simply create a CarouselSlider widget, and pass the required params:

CarouselSlider(
  options: CarouselOptions(height: 400.0),
  items: [1,2,3,4,5].map((i) {
    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: Text('text $i', style: TextStyle(fontSize: 16.0),)
        );
      },
    );
  }).toList(),
)
Parameters
CarouselSlider(
  items: items,
  options: CarouselOptions(
    height: 400,
    aspectRatio: 16/9,
    viewportFraction: 0.8,
    initialPage: 0,
    enableInfiniteScroll: true,
    reverse: false,
    autoPlay: true,
    autoPlayInterval: Duration(seconds: 3),
    autoPlayAnimationDuration: Duration(milliseconds: 800),
    autoPlayCurve: Curves.fastOutSlowIn,
    enlargeCenterPage: true,
    enlargeFactor: 0.3,
    onPageChanged: callbackFunction,
    scrollDirection: Axis.horizontal,
  )
)

If you pass the height parameter, the aspectRatio parameter will be ignored.

Build item widgets on demand

This method will save memory by building items once it becomes necessary. This way they won't be built if they're not currently meant to be visible on screen. It can be used to build different child item widgets related to content or by item index.

CarouselSlider.builder(
  itemCount: 15,
  itemBuilder: (BuildContext context, int itemIndex, int pageViewIndex) {
    return Container(
      child: Text(itemIndex.toString()),
    );
  }
)
Carousel controller

In order to manually control the PageView's position, you can create your own CarouselSliderController, and pass it to CarouselSlider. Then you can use the CarouselSliderController instance to manipulate the position.

class CarouselDemo extends StatelessWidget {
  CarouselSliderController buttonCarouselController = CarouselSliderController();

  @override
  Widget build(BuildContext context) => Column(
    children: <Widget>[
      CarouselSlider(
        items: child,
        controller: buttonCarouselController,
        options: CarouselOptions(
          autoPlay: false,
          enlargeCenterPage: true,
          viewportFraction: 0.9,
          aspectRatio: 2.0,
          initialPage: 2,
        ),
      ),
      RaisedButton(
        onPressed: () => buttonCarouselController.nextPage(
            duration: Duration(milliseconds: 300), curve: Curves.linear),
        child: Text('→'),
      )
    ]
  );
}
CarouselSliderController methods
/// Animate to the next page
controller.nextPage({Duration duration, Curve curve});


/// Animate to the previous page
controller.previousPage({Duration duration, Curve curve});


/// Jump to the given page.
controller.jumpToPage(int page);


/// Animate to the given page.
controller.animateToPage(int page, {Duration duration, Curve curve});


/// Start/Stop Auto-play (only work if `autoplay` is set to true in `CarouselOptions`)
controller.startAutoPlay();

Screenshots

Basic text carousel slider:

simple

Basic image carousel slider:

image

A more complicated image carousel slider:

complicated image

Full Screen image carousel slider:

fullscreen

Image carousel slider with custom indicator:

indicator

Manually control the page position:

manual

Vertical carousel slider:

vertical

Simple on-demand image carousel slider, with image auto prefetch:

prefetch

No infinite scroll:

no-loop

All screenshots above can be found at the example project.

License

MIT

所属分类

源码仓库

使用此插件的项目