Flutter页面过渡动画插件easy_transition的使用

easy_transition

Pub Version likes popularity GitHub

Flutter包,用于轻松为页面导航添加动画。它提供了缩放和淡入淡出两种过渡效果。

由Omar Mouki创建

GitHub
LinkedIn

使用

只需添加[EasyTransition]小部件并提供子部件和目标页面即可。默认构造函数将创建一个缩放动画:

Center(
  child: EasyTransition(
    child: Icon(Icons.ac_unit),
    pageToPush: SecondPage(),
  ),
),

该包支持多种动画类型和推送类型。以下示例将使用PushAndRemoveUntil推送类型,并提供可选的transitionAlignmentcurve

Center(
  child: EasyTransition.scalePushAndRemoveUntil(
    child: Icon(Icons.ac_unit),
    pageToPush: SecondPage(),
    transitionAlignment: Alignment.center,
    curve: Curves.decelerate,
  ),
),

这将创建一个淡入淡出动画。

Center(
  child: EasyTransition.fadePushReplacement(
    child: Icon(Icons.ac_unit),
    pageToPush: SecondPage(),
  ),
),

属性

/// 必需参数适用于所有构造函数

/// [child] 是点击时激活导航的小部件
final Widget child;

/// [pageToPush] 是要导航到的目标页面
final Widget pageToPush;

/// 可选参数适用于所有缩放构造函数和默认构造函数

/// [transitionDurationMilliseconds] 推送动画的时间,默认为 [transitionDurationMilliseconds = 500]
int? transitionDurationMilliseconds;

/// [reverseTransitionDurationMilliseconds] 弹出动画的时间,默认为 [reverseTransitionDurationMilliseconds = 200]
int? reverseTransitionDurationMilliseconds;

/// 缩放动画的起始点
Alignment? transitionAlignment;

/// 缩放导航的推送动画类型
Curve? curve;

/// 缩放导航的弹出动画类型
Curve? reverseCurve;

示例代码

以下是一个完整的示例代码,展示如何使用easy_transition插件实现不同的页面过渡动画。

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

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

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

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

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          // 默认缩放动画
          EasyTransition(
            child: Card(
              child: Container(
                height: 150,
                child: Center(
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    children: [
                      Text('默认缩放动画'),
                      Icon(Icons.person)
                    ],
                  ),
                ),
              ),
            ),
            pageToPush: SecondPage(),
            transitionDurationMilliseconds: 400,
            transitionAlignment: Alignment.center,
            curve: Curves.decelerate,
          ),
          // 淡入淡出动画
          EasyTransition.fadePushReplacement(
            child: Card(
              child: Container(
                height: 150,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: [
                    Text('淡入淡出动画'),
                    Icon(Icons.phone_android)
                  ],
                ),
              ),
            ),
            pageToPush: SecondPage(),
          ),
          // 自定义缩放动画
          EasyTransition(
            child: Card(
              child: Container(
                height: 150,
                child: Center(
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    children: [
                      Text('自定义缩放动画'),
                      Icon(Icons.access_alarms)
                    ],
                  ),
                ),
              ),
            ),
            pageToPush: SecondPage(),
            transitionDurationMilliseconds: 400,
            transitionAlignment: Alignment.topLeft,
            curve: Curves.easeIn,
            reverseCurve: Curves.bounceInOut,
          ),
        ],
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        brightness: Brightness.dark,
        centerTitle: true,
        title: Text('第二页'),
      ),
    );
  }
}

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

1 回复

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


easy_transition 是一个用于简化 Flutter 页面过渡动画的插件。它提供了一种简单的方式来创建各种页面过渡效果,而不需要编写复杂的动画代码。以下是如何使用 easy_transition 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 easy_transition 依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_transition: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 easy_transition 包:

import 'package:easy_transition/easy_transition.dart';

3. 使用 EasyTransition 进行页面过渡

EasyTransition 提供了多种过渡效果,你可以通过 EasyTransition 类来使用这些效果。

基本用法

以下是一个简单的例子,展示如何使用 EasyTransition 进行页面过渡:

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

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

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

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 使用 EasyTransition 进行页面过渡
            EasyTransition(
              child: SecondPage(),
              type: TransitionType.fade, // 过渡类型
              duration: Duration(milliseconds: 500), // 过渡持续时间
            ).push(context);
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('Go Back'),
        ),
      ),
    );
  }
}

4. 过渡类型

EasyTransition 支持多种过渡类型,你可以通过 type 参数来指定:

  • TransitionType.fade: 淡入淡出效果
  • TransitionType.slide: 滑动效果
  • TransitionType.scale: 缩放效果
  • TransitionType.rotate: 旋转效果
  • TransitionType.custom: 自定义效果

自定义过渡

如果你想要自定义过渡效果,可以使用 TransitionType.custom 并提供一个 PageRouteBuilder

EasyTransition(
  child: SecondPage(),
  type: TransitionType.custom,
  customTransition: (context, animation, secondaryAnimation, child) {
    return FadeTransition(
      opacity: animation,
      child: child,
    );
  },
  duration: Duration(milliseconds: 500),
).push(context);
回到顶部