Flutter轮播图展示插件slick_slides的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter轮播图展示插件slick_slides的使用

Slick Slides

Slick Slides 是一个用于创建精美幻灯片的Flutter插件。 它不仅支持代码格式化和动画,还支持标题幻灯片、图片或其他任何Flutter Widget。

Slick Slides 由Serverpod团队开发和维护。 Serverpod 是一个用Dart编写的服务器,专为Flutter社区服务. 如果你还没有看过, 去看看吧.

Slick Slides Cover

使用说明

设置Slick Slides非常简单. 只需将 slick_slides 添加到你的 pubspec.yaml 文件中, 然后按照下面的指南进行操作.

  1. 包含字体 默认情况下, Slick Slides 使用 InterJetbrains Mono 来显示文本和代码. 需要将它们添加到 pubspec 中以使 Slick Slides 包可用. 这是一个示例, 显示了如何在 pubspec.yaml 的文件的 flutter 部分加载字体.

    flutter:
      uses-material-design: true
    
      # Include fonts from slick_slides package.
      fonts:
        - family: Inter
          fonts:
            - asset: packages/slick_slides/fonts/inter.ttf
        - family: JetbrainsMono
          fonts:
            - asset: packages/slick_slides/fonts/jetbrainsmono.ttf
    
      # Include all assets from the assets directory.
      assets:
        - assets/
    
  2. 初始化Slick Slides 在使用 Slick Slides 之前, 需要先初始化它. 这会加载代码格式器和其他所需资源. 如果在调用 runApp 之前初始化 Slick Slides, 则需要在调用 initialize 方法之前调用 WidgetsFlutterBinding.ensureInitialized().

    WidgetsFlutterBinding.ensureInitialized();
    await SlickSlides.initialize();
    

现在可以在你的 widget 树中的任何地方添加 SlideDeck widget, 但通常情况下, 你会将其作为 MaterialApp 的的根容器来使用. SlideDeck 维护自己的导航器和主题.

要构建演示文稿, 向 SlideDeck widget 传递多个 Slide 对象. Slide 对象包含生成幻灯片的方法、主题数据、过渡信息和其他属性. Slick Slides 提供了许多预设的幻灯片类型, 你可以很容易地将其插入到演示文稿中, 如 TitleSlideBulletsSlideAnimatedCodeSlidePersonSlide, 但你也可以创建自定义幻灯片, 具有任何类型的布局和内容.

下面是一个简单的 SlideDeck 示例, 其中有两个幻灯片:

// 设置默认过渡效果。
const _defaultTransition = SlickFadeTransition(
  color: Colors.black,
);

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

  @override
  Widget build(BuildContext context) {
    // 创建一个新的 SlideDeck, 包含一个 TitleSlide 和一个 BulletsSlide。
    return SlideDeck(
      slides: [
        TitleSlide(
          title: 'Slick Slides',
          subtitle: 'Stunning presentations in Flutter',
          transition: _defaultTransition,
        ),
        BulletsSlide(
          title: 'What is Slick Slides?',
          bulletByBullet: true,
          bullets: const [
            'Bullet number 1',
            'A second bullet',
          ],
          transition: _defaultTransition,
        ),
      ],
    );
  }
}

展示和动画代码

要显示或动画代码, 使用 AnimatedCodeSlide. Slick Slides 将对你的代码片段进行差异分析, 并像你在打字时那样动画代码的变化. 你还可以突出显示代码行, 以引起额外的关注. 下面是一个简单的示例:

const _codeExampleA = '''class MyClass {

}
''';

const _codeExampleB = '''class MyClass {
  String methodToAnimateIn() {
    return 'Hello world!';
  }
}
''';

@override
Widget build(BuildContext context) {
  // 创建一个新的 SlideDeck, 包含一个 TitleSlide 和一个 BulletsSlide.
  return SlideDeck(
    slides: [
      AnimatedCodeSlide(
        formattedCode: [
          FormattedCode(
            code: _codeExampleA,
          ),
          FormattedCode(
            code: _codeExampleB,
            highlightedLines: [1, 2, 3],
          ),
        ],
      ),
    ],
  );
}

创建自定义类型的幻灯片

Slick Slides 允许你使用任何 Flutter widgets 创建自定义类型的幻灯片. 你甚至可以创建交互式幻灯片. 对于使用自定义资产(如图片或动画)且需要提前加载的幻灯片, 可以使用 onPrecache 属性提供代码, 以便在滑动前加载幻灯片. 下面是一个自定义幻灯片示例, 显示了一个动画的 Serverpod logo (来自 made_with_serverpod 包):

Slide(
  builder: (context) {
    return const ContentLayout(
      content: Center(
        child: SizedBox(
          width: 600,
          child: AnimatedServerpodLogo(
            brightness: Brightness.dark,
            animate: true,
            loop: false,
          ),
        ),
      ),
    );
  },
  transition: const SlickFadeTransition(),
  onPrecache: (context) async {
    AnimatedServerpodLogo.precache();
  },
)

小贴士! 你也可以覆盖 Slide 类, 使其更具有可重用性. 查看默认幻灯片集的源代码, 了解你是如何做到这一点的.

其他酷炫功能

Slick Slides 可以做以下一些很酷的事情:

  • 创建带有丰富文本的幻灯片.
  • 做英雄动画(只需像任何 Flutter 过渡一样添加英雄).
  • 创建带有自定义控件的交互式幻灯片.
  • 添加自定义主题. 默认提供了深色和浅色主题, 但你可以轻松创建和自定义自己的主题.
  • 自动播放的幻灯片.
  • 每个幻灯片关联的音频文件, 当幻灯片显示时播放.

已知问题

Slick Slides 工作得很好, 但也有一些已知的问题, 我们希望将来能够解决 (欢迎贡献):

  • 默认用于显示高亮代码的自定义字体 (Jetbrains Mono) 不适用于 Flutter web.
  • Hero 动画如果被中断 (例如, 快速切换到另一个幻灯片时), 会卡住.
  • 视频幻灯片在使用淡入过渡离开幻灯片时不会正确淡出.

示例代码


更多关于Flutter轮播图展示插件slick_slides的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter轮播图展示插件slick_slides的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个使用 slick_carousel 插件(注意:slick_slides 可能是指 slick_carousel 的一个组件或功能,因为 slick_carousel 是 Flutter 中一个流行的轮播图插件)在 Flutter 中实现轮播图展示的示例代码。

首先,确保你已经在 pubspec.yaml 文件中添加了 slick_carousel 依赖:

dependencies:
  flutter:
    sdk: flutter
  slick_carousel: ^4.0.0  # 请检查最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,在你的 Flutter 项目中,你可以按照以下步骤创建一个轮播图:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Slick Carousel Example'),
        ),
        body: CarouselExample(),
      ),
    );
  }
}

class CarouselExample extends StatefulWidget {
  @override
  _CarouselExampleState createState() => _CarouselExampleState();
}

class _CarouselExampleState extends State<CarouselExample> {
  final List<String> images = [
    'https://via.placeholder.com/600x300?text=Image+1',
    'https://via.placeholder.com/600x300?text=Image+2',
    'https://via.placeholder.com/600x300?text=Image+3',
  ];

  @override
  Widget build(BuildContext context) {
    return Center(
      child: SizedBox(
        width: double.infinity,
        height: 300,
        child: SlickCarousel(
          options: CarouselOptions(
            autoplay: true,
            autoplaySpeed: 3000,
            dots: true,
            pauseOnHover: false,
            responsive: [
              breakpoint(1024,
                  options: CarouselOptions(
                    slidesToShow: 3,
                    slidesToScroll: 1,
                  )),
              breakpoint(600,
                  options: CarouselOptions(
                    slidesToShow: 2,
                    slidesToScroll: 1,
                  )),
              breakpoint(480,
                  options: CarouselOptions(
                    slidesToShow: 1,
                    slidesToScroll: 1,
                  )),
            ],
          ),
          children: images.map((image) => Image.network(image, fit: BoxFit.cover)).toList(),
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖导入:导入 flutter/material.dartslick_carousel/slick_carousel.dart
  2. 主应用MyApp 是一个简单的 Flutter 应用,包含一个 Scaffold 和一个 CarouselExample 小部件。
  3. 轮播图示例
    • CarouselExample 是一个有状态的小部件,它包含了一个图片 URL 的列表。
    • _CarouselExampleState 中,使用 SlickCarousel 小部件来创建轮播图。
    • CarouselOptions 配置了轮播图的行为,比如自动播放、自动播放速度、是否显示指示点等。
    • responsive 选项允许你根据屏幕宽度调整轮播图的显示和滚动行为。
    • children 属性接收一个图片小部件的列表,这些图片将用于轮播展示。

这段代码展示了如何使用 slick_carousel 插件在 Flutter 应用中实现一个基本的轮播图功能。你可以根据需求进一步自定义和扩展。

回到顶部