Flutter引导页轮播插件flutter_carousel_intro的使用

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

Flutter引导页轮播插件flutter_carousel_intro的使用

插件介绍

flutter_carousel_intro 是一个用于创建引导页轮播效果的Flutter插件,由 Eliezer António 开发。该插件支持自定义子组件、滑动、旋转过渡、自动播放、水平和垂直过渡等功能,并且可以在Flutter Android、iOS、Web和桌面平台上使用。

Main GIF

安装

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_carousel_intro: ^1.0.11

然后在Dart文件中导入插件:

import 'package:flutter_carousel_intro/flutter_carousel_intro.dart';

使用方法

基本用法

以下是一个简单的示例,展示了如何使用 FlutterCarouselIntro 创建一个包含多个 SliderItem 的轮播图:

import 'package:flutter/material.dart';
import 'package:flutter_carousel_intro/flutter_carousel_intro.dart';
import 'package:flutter_svg/svg.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(useMaterial3: true),
      debugShowCheckedModeBanner: false,
      home: const MyHomePage(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: MySlideShow(),
    );
  }
}

class MySlideShow extends StatelessWidget {
  const MySlideShow({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: FlutterCarouselIntro(
        animatedRotateX: true,
        animatedRotateZ: true,
        scale: true,
        autoPlay: true,
        animatedOpacity: false,
        autoPlaySlideDuration: const Duration(seconds: 2),
        autoPlaySlideDurationTransition: const Duration(milliseconds: 1100),
        primaryColor: const Color(0xff6C63FF),
        secondaryColor: Colors.grey,
        scrollDirection: Axis.horizontal, // 或者 Axis.vertical
        indicatorEffect: IndicatorEffects.jumping,
        showIndicators: true,
        slides: [
          SliderItem(
            title: 'Title 1',
            subtitle: const Text('Lorem Ipsum is simply dummy text'),
            widget: SvgPicture.asset("assets/slide-1.svg"),
          ),
          SliderItem(
            title: 'Title 2',
            subtitle: const Text('Lorem Ipsum is simply dummy text'),
            widget: SvgPicture.asset("assets/slide-2.svg"),
          ),
          SliderItem(
            title: 'Title 3',
            subtitle: const Text('Lorem Ipsum is simply dummy text'),
            widget: SvgPicture.asset("assets/slide-3.svg"),
          ),
          SliderItem(
            title: 'Title 4',
            subtitle: const Text('Lorem Ipsum is simply dummy text'),
            widget: SvgPicture.asset("assets/slide-4.svg"),
          ),
          SliderItem(
            title: 'Title 5',
            subtitle: const Text('Lorem Ipsum is simply dummy text'),
            widget: SvgPicture.asset("assets/slide-5.svg"),
          ),
          SliderItem(
            title: 'Title 6',
            widget: SvgPicture.asset("assets/slide-6.svg"),
            subtitle: ElevatedButton(
              onPressed: () {},
              child: const Text("skip"),
            ),
          ),
        ],
      ),
    );
  }
}

参数说明

以下是 SliderItem 的所有参数:

String? title,
TextStyle? titleTextStyle,
TextAlign? titleTextAlign,
Widget? subtitle,

其他功能

  • 动画效果:可以通过设置 animatedRotateXanimatedRotateZscaleanimatedOpacity 来启用不同的动画效果。
  • 自动播放:通过设置 autoPlayautoPlaySlideDuration 来控制自动播放的时间间隔。
  • 指示器:通过设置 indicatorEffectshowIndicators 来控制指示器的效果和显示。

示例效果

正常示例

Normal Example

动画不透明度

Animated Opacity

动画缩放

Animated Scale

X轴动画旋转

Animated Rotation on the X Axis

Z轴动画旋转

Animated Rotation on the Z Axis

贡献

欢迎为这个项目做出贡献。如果你发现了Bug或有新的功能需求,请提交 issue,或者直接发送 pull request

其他资源

更多关于 flutter_carousel_intro 的信息可以参考 GitHub 仓库Flutter Gems 页面

希望这篇文档能帮助你快速上手 flutter_carousel_intro 插件!如果有任何问题或建议,请随时联系我。


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

1 回复

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


当然,下面是一个关于如何使用 flutter_carousel_intro 插件来创建 Flutter 应用中的引导页轮播的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_carousel_intro: ^^最新版本号(请替换为当前最新版本)

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

接下来,在你的 Dart 文件中,你可以按照以下方式使用 flutter_carousel_intro

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: IntroScreen(),
    );
  }
}

class IntroScreen extends StatefulWidget {
  @override
  _IntroScreenState createState() => _IntroScreenState();
}

class _IntroScreenState extends State<IntroScreen> {
  final List<IntroPage> _pages = [
    IntroPage(
      title: "Welcome!",
      description: "This is the first slide of the introduction.",
      image: Image.asset('assets/images/slide1.png'), // 请确保你的 assets 文件夹中有相应的图片
    ),
    IntroPage(
      title: "Features",
      description: "Discover the amazing features of our app.",
      image: Image.asset('assets/images/slide2.png'),
    ),
    IntroPage(
      title: "Get Started",
      description: "Ready to start using our app?",
      image: Image.asset('assets/images/slide3.png'),
      // 可以在最后一页添加一个按钮
      skip: TextButton(
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => HomeScreen()),
          );
        },
        child: Text('Get Started'),
      ),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CarouselIntro(
        pages: _pages,
        onDone: () {
          // 用户完成引导页后的操作
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => HomeScreen()),
          );
        },
        onSkip: () {
          // 用户跳过引导页后的操作
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => HomeScreen()),
          );
        },
        showSkipButton: true, // 是否显示跳过按钮
        dotBgColor: Colors.transparent, // 圆点背景颜色
        activeDotColor: Colors.blue, // 激活状态的圆点颜色
        dotIncreasedColor: Colors.red, // 当用户滑动到某一页时,该页的圆点颜色
        dotSize: 10.0, // 圆点大小
        dotSpacing: 25.0, // 圆点之间的间距
        skipFlex: 0, // 跳过按钮的占比(相对于底部导航)
        nextFlex: 2, // 下一步按钮的占比
        doneFlex: 2, // 完成按钮的占比
        rtl: false, // 从右到左的布局(针对阿拉伯语等语言)
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Screen'),
      ),
      body: Center(
        child: Text('Welcome to the Home Screen!'),
      ),
    );
  }
}

class IntroPage {
  final String title;
  final String description;
  final Widget image;
  final Widget? skip;

  IntroPage({
    required this.title,
    required this.description,
    required this.image,
    this.skip,
  });
}

在这个示例中:

  1. 我们定义了一个 IntroPage 类来封装每一页的内容,包括标题、描述、图片以及可选的跳过按钮。
  2. _IntroScreenState 类中,我们创建了一个 _pages 列表,其中包含三个 IntroPage 实例。
  3. 我们使用 CarouselIntro 小部件来显示这些引导页。
  4. onDoneonSkip 回调分别在用户完成引导页或跳过引导页时被调用,这里我们导航到 HomeScreen

请确保将 assets/images/slide1.png, assets/images/slide2.png, 和 assets/images/slide3.png 替换为你自己的图片资源,并在 pubspec.yaml 中正确声明这些资源。

回到顶部