Flutter页面路由过渡动画插件route_transitions_snk的使用

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

Flutter页面路由过渡动画插件route_transitions_snk的使用

简介

此插件帮助我们从零开始实现页面路由过渡动画。通过使用RouteTransitions类,可以轻松定义页面切换时的动画效果。


使用示例

基本用法

在以下代码中,我们将展示如何使用RouteTransitions来实现页面之间的过渡动画。

RouteTransitions(
    context: context,
    animation: AnimationType.fadeIn, // 动画类型
    duration: const Duration(milliseconds: 1000), // 动画持续时间
    replacement: true, // 是否替换当前页面
    child: ScreenTwo(), // 目标页面
);

完整示例代码

示例代码

import 'package:flutter/material.dart';

import 'package:route_transitions_snk/route_transitions_snk.dart';

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

// 主应用类
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false, // 去掉调试标志
      title: 'CustomRoutePackage', // 应用名称
      initialRoute: 'screen1', // 初始路由
      routes: {
        'screen1': (_) => const OneScreen(), // 路由映射
        'screen2': (_) => const TwoScreen(),
      },
    );
  }
}

// 第一页
class OneScreen extends StatelessWidget {
  const OneScreen({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Screen One'), // 标题
        backgroundColor: Colors.transparent, // 透明背景
        elevation: 0, // 不显示阴影
      ),
      backgroundColor: Colors.blue, // 蓝色背景
      body: Center(
        child: MaterialButton(
          onPressed: () {
            // 页面跳转并应用动画
            RouteTransitions(
              context: context,
              animation: AnimationType.fadeIn, // 淡入动画
              duration: const Duration(milliseconds: 1000), // 动画持续时间
              replacement: true, // 替换当前页面
              child: const TwoScreen(), // 跳转到目标页面
            );
          },
          elevation: 0, // 按钮无阴影
          color: Colors.blueAccent[100], // 按钮颜色
          shape: const StadiumBorder(), // 圆角按钮
          child: SizedBox(
            width: 100,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center, // 水平居中
              children: const [
                Icon(
                  Icons.arrow_forward, // 向右箭头图标
                  color: Colors.white,
                  size: 25,
                ),
                Text(
                  '2', // 数字2
                  style: TextStyle(color: Colors.white, fontSize: 22),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

// 第二页
class TwoScreen extends StatelessWidget {
  const TwoScreen({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Screen Two'), // 标题
        backgroundColor: Colors.transparent, // 透明背景
        elevation: 0, // 不显示阴影
      ),
      backgroundColor: Colors.amber[700], // 橙色背景
      body: Center(
        child: MaterialButton(
          onPressed: () {
            // 返回上一页并应用动画
            RouteTransitions(
              context: context,
              animation: AnimationType.fadeIn, // 淡入动画
              replacement: true, // 替换当前页面
              child: const OneScreen(), // 返回到目标页面
            );
          },
          elevation: 0, // 按钮无阴影
          color: Colors.amber[100], // 按钮颜色
          shape: const StadiumBorder(), // 圆角按钮
          child: SizedBox(
            width: 100,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center, // 水平居中
              children: [
                Text(
                  '1', // 数字1
                  style: TextStyle(
                    color: Colors.amberAccent[700], // 文字颜色
                    fontSize: 22,
                  ),
                ),
                Icon(
                  Icons.arrow_back, // 向左箭头图标
                  color: Colors.amberAccent[700], // 图标颜色
                  size: 25,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


route_transitions_snk 是一个 Flutter 插件,它提供了一种简单的方式来为页面路由添加过渡动画。使用这个插件,你可以轻松地为你的应用添加各种页面切换动画,而不需要编写复杂的动画代码。

安装

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

dependencies:
  flutter:
    sdk: flutter
  route_transitions_snk: ^1.0.0  # 请检查最新版本

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

使用示例

以下是如何使用 route_transitions_snk 插件来实现页面路由过渡动画的简单示例。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Route Transitions Demo',
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 使用 route_transitions_snk 进行页面切换
            Navigator.of(context).push(
              RouteTransitions(
                child: SecondPage(),
                animation: AnimationType.fadeIn, // 选择动画类型
                duration: Duration(milliseconds: 500), // 设置动画时长
                reverseDuration: Duration(milliseconds: 500), // 设置返回动画时长
              ),
            );
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.of(context).pop();
          },
          child: Text('Go Back'),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!