Flutter动画过渡效果插件transition_plus的使用

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

Flutter动画过渡效果插件 transition_plus 的使用

transition_plus 是一个用于在页面之间添加有趣动画过渡效果的Flutter插件。它提供了多种不同的动画方式,让页面切换更加生动。

动画演示

以下是 scale transition 的动画示例:

Scale Transition Demo

如何使用

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 transition_plus 依赖:

dependencies:
  transition_plus: 0.0.12

2. 导入包

然后在你的 Dart 文件中导入该包:

import 'package:transition_plus/transition_plus.dart';

3. 使用示例

你可以通过以下代码来实现不同方向的缩放动画过渡效果:

Navigator.push(context, ScaleTransition1(page: SecondPage(), type: ScaleTrasitionTypes.bottom));

不同类型的动画

默认情况下,过渡动画是从屏幕中心开始的。你可以根据需要选择不同的动画类型:

  • 从底部到顶部bottom
  • 从顶部到底部top
  • 从左下角到右上角bottomLeft
  • 从右下角到左上角bottomRight
  • 从屏幕中心center
  • 从右侧到左侧right
  • 从左侧到右侧left

完整示例 Demo

以下是一个完整的示例,展示了如何使用 transition_plus 实现不同的动画过渡效果:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Home(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.bottom,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE BOTTOM TRANSITION'),
            ),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.top,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE TOP TRANSITION'),
            ),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.bottomLeft,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE BOTTOM LEFT TRANSITION'),
            ),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.bottomRight,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE BOTTOM RIGHT TRANSITION'),
            ),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.center,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE CENTER TRANSITION'),
            ),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.right,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE RIGHT TRANSITION'),
            ),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                ScaleTransition1(
                  page: SecondPage(),
                  type: ScaleTrasitionTypes.left,
                ),
              ),
              child: const Text('TAP TO VIEW SCALE LEFT TRANSITION'),
            ),
          ],
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        centerTitle: true,
        title: const Text('Transition Plus'),
      ),
    );
  }
}

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

1 回复

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


当然,transition_plus 是一个强大的 Flutter 插件,用于在 Flutter 应用中实现复杂的动画过渡效果。以下是一个简单的代码示例,展示如何使用 transition_plus 来实现页面之间的过渡动画。

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

dependencies:
  flutter:
    sdk: flutter
  transition_plus: ^x.y.z  # 请替换为最新版本号

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

接下来,我们创建一个简单的 Flutter 应用,展示如何使用 transition_plus

1. 创建一个 Flutter 项目

假设你已经有一个 Flutter 项目,如果没有,可以通过 flutter create my_app 来创建一个新的项目。

2. 配置路由和动画

main.dart 文件中,我们配置路由并使用 TransitionPlus 来实现页面过渡动画。

import 'package:flutter/material.dart';
import 'package:transition_plus/transition_plus.dart';
import 'second_screen.dart';  // 假设我们有一个 SecondScreen 页面

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Transition+ Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      onGenerateRoute: (settings) {
        switch (settings.name) {
          case '/':
            return TransitionPlusRoute(
              builder: () => HomeScreen(),
              transition: (context, animation, secondaryAnimation, child) {
                return SlideTransition(
                  position: animation.drive(Tween<Offset>(
                    begin: Offset(1.0, 0.0),
                    end: Offset(0.0, 0.0),
                  )),
                  child: child,
                );
              },
            );
          case '/second':
            return TransitionPlusRoute(
              builder: () => SecondScreen(),
              transition: (context, animation, secondaryAnimation, child) {
                return FadeTransition(
                  opacity: animation.drive(Tween<double>(begin: 0.0, end: 1.0)),
                  child: child,
                );
              },
            );
          default:
            return MaterialPageRoute(builder: (_) => Scaffold(body: Center(child: Text('Not Found'))));
        }
      },
      initialRoute: '/',
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => Navigator.pushNamed(context, '/second'),
          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('Welcome to the Second Screen!'),
      ),
    );
  }
}

3. 运行应用

现在,你可以运行你的 Flutter 应用,通过点击按钮来导航到第二个屏幕,并观察动画过渡效果。

代码解释

  • TransitionPlusRoute:这是 transition_plus 插件提供的一个自定义路由类,允许你指定过渡动画。
  • SlideTransitionFadeTransition:这些是 transition_plus 提供的过渡动画类型。SlideTransition 用于滑动动画,FadeTransition 用于淡入淡出动画。
  • Tween:用于定义动画的起始和结束值。

这只是一个简单的示例,transition_plus 插件还支持更多复杂的动画效果,如缩放、旋转等,你可以根据需要自行探索和实现。

回到顶部