Flutter界面过渡动画插件flutter_overboard的使用

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

Flutter界面过渡动画插件flutter_overboard的使用

简介

flutter_overboard 是一个用于创建Flutter应用中引导页(Onboarding)的插件,它能够帮助开发者快速搭建出美观的引导页面,同时提供了丰富的自定义选项来满足不同的需求。

使用方法

添加依赖

首先,在项目的 pubspec.yaml 文件中添加如下依赖:

dependencies:
  flutter_overboard: ^3.1.3

或者直接通过命令行安装:

flutter pub add flutter_overboard

导入包

在需要使用的Dart文件顶部导入此包:

import 'package:flutter_overboard/flutter_overboard.dart';

创建引导页内容

接下来,我们需要定义要展示的内容。这可以通过创建一系列 PageModel 对象来完成,每个对象代表一页内容。以下是一个简单的例子:

final pages = [
  PageModel(
      color: const Color(0xFF0097A7),
      imageAssetPath: 'assets/01.png',
      title: 'Screen 1',
      body: 'Share your ideas with the team',
      doAnimateImage: true),
  PageModel(
      color: const Color(0xFF536DFE),
      imageAssetPath: 'assets/02.png',
      title: 'Screen 2',
      body: 'See the increase in productivity & output',
      doAnimateImage: true),
  PageModel(
      color: const Color(0xFF9B90BC),
      imageAssetPath: 'assets/03.png',
      title: 'Screen 3',
      body: 'Connect with the people from different places',
      doAnimateImage: true),
];

你也可以传递自定义的小部件作为页面的一部分:

PageModel.withChild(
    child: Padding(
      padding: EdgeInsets.only(bottom: 25.0),
      child: Image.asset('assets/02.png', width: 300.0, height: 300.0),
    ),
    color: const Color(0xFF5886d6),
    doAnimateChild: true)

构建OverBoard小部件

最后一步是将这些页面整合到 OverBoard 小部件中,并根据需要调整其属性。例如:

OverBoard(
  pages: pages,
  showBullets: true,
  skipCallback: () {
    // 跳过按钮点击后的操作
  },
  finishCallback: () {
    // 完成按钮点击后的操作
  },
)

自定义选项

你可以进一步定制 OverBoardPageModel 的外观和行为,比如更改按钮文字、颜色、背景图片等。详细配置可以参考官方文档中的表格说明。

OverBoard Widget 属性表

PROPERTY TYPE REQUIRED DETAILS
pages List<PageModel> yes 需要渲染的页面列表
center Offset no 设置圆形揭示中心点
showBullets Boolean no 启用/禁用指示点显示
skipText String no 自定义跳过按钮文本
nextText String no 自定义下一步按钮文本
finishText String no 自定义完成按钮文本
buttonColor Color no 自定义按钮颜色
activeBulletColor Color no 自定义激活状态下的指示点颜色
inactiveBulletColor Color no 自定义非激活状态下的指示点颜色
backgroundProvider ImageProvider no 提供引导页的背景图片
skipCallback VoidCallback no 跳过按钮点击回调
finishCallback VoidCallback no 完成按钮点击回调

PageModel Widget 属性表

PROPERTY TYPE REQUIRED DETAILS
color Color no 页面背景色
imageAssetPath String no 图片资源路径
title String no 标题文本
body String no 正文文本
child Widget no 自定义子组件
doAnimateChild Bool yes 是否启用子组件动画
doAnimateImage Bool yes 是否启用图片动画
titleColor Color no 标题文本颜色
bodyColor Color no 正文文本颜色

示例代码

下面是一个完整的示例代码,展示了如何结合上述所有步骤创建一个带有引导页的应用程序:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Overboard Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Overboard Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<ScaffoldState> _globalKey = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _globalKey,
      body: OverBoard(
        allowScroll: true,
        pages: pages,
        showBullets: true,
        inactiveBulletColor: Colors.blue,
        skipCallback: () {
          ScaffoldMessenger.of(context).showSnackBar(SnackBar(
            content: Text("Skip clicked"),
          ));
        },
        finishCallback: () {
          ScaffoldMessenger.of(context).showSnackBar(SnackBar(
            content: Text("Finish clicked"),
          ));
        },
      ),
    );
  }

  final pages = [
    PageModel(
        color: const Color(0xFF0097A7),
        imageAssetPath: 'assets/01.png',
        title: 'Screen 1',
        body: 'Share your ideas with the team',
        doAnimateImage: true),
    PageModel(
        color: const Color(0xFF536DFE),
        imageAssetPath: 'assets/02.png',
        title: 'Screen 2',
        body: 'See the increase in productivity & output',
        doAnimateImage: true),
    PageModel(
        color: const Color(0xFF9B90BC),
        imageAssetPath: 'assets/03.png',
        title: 'Screen 3',
        body: 'Connect with the people from different places',
        doAnimateImage: true),
    PageModel.withChild(
        child: Padding(
          padding: EdgeInsets.only(bottom: 25.0),
          child: Image.asset('assets/02.png', width: 300.0, height: 300.0),
        ),
        color: const Color(0xFF5886d6),
        doAnimateChild: true)
  ];
}

这个例子中我们还启用了键盘和鼠标滚轮滚动支持,并且为指示点设置了不同的颜色。此外,当用户点击“跳过”或“完成”时会弹出Snackbar通知。

希望以上信息对您有所帮助!如果有任何问题,请随时提问。


更多关于Flutter界面过渡动画插件flutter_overboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter界面过渡动画插件flutter_overboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用flutter_overboard插件来实现界面过渡动画的代码案例。flutter_overboard是一个允许开发者创建自定义页面过渡动画的Flutter插件。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_overboard: ^x.y.z  # 请使用最新版本号

然后运行flutter pub get来安装依赖。

以下是一个完整的示例代码,展示了如何使用flutter_overboard来实现页面间的过渡动画。

主应用代码 (main.dart)

import 'package:flutter/material.dart';
import 'package:flutter_overboard/flutter_overboard.dart';
import 'second_screen.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final OverboardController _controller = OverboardController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              OverboardPageRoute(
                builder: (context) => SecondScreen(),
                transitionDuration: Duration(milliseconds: 500),
                controller: _controller,
                // 配置过渡动画参数
                animationCurve: Curves.easeInOutQuad,
                screenCurve: Curves.bounceInOut,
                alignment: Alignment.center,
                backgroundCurve: Curves.fastOutSlowIn,
                initialScale: 0.8,
                finalScale: 1.2,
                angle: 45.0,
              ),
            );
          },
          child: Text('Go to Second Screen'),
        ),
      ),
    );
  }
}

第二屏幕代码 (second_screen.dart)

import 'package:flutter/material.dart';

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Screen'),
      ),
      body: Center(
        child: Text('You are now on the second screen!'),
      ),
    );
  }
}

解释

  1. 依赖导入:在main.dart中导入flutter_overboard包。
  2. OverboardController:创建一个OverboardController实例,用于控制动画。
  3. OverboardPageRoute:使用OverboardPageRoute替代默认的MaterialPageRoute,并配置各种动画参数,如transitionDurationanimationCurvescreenCurve等。
  4. 按钮导航:在按钮点击事件中,使用Navigator.push结合OverboardPageRoute来实现页面跳转和过渡动画。

通过这种方式,你可以使用flutter_overboard插件在Flutter应用中实现丰富的页面过渡动画效果。根据你的需求,你可以调整各种动画参数以达到最佳效果。

回到顶部