Flutter路由过渡动画插件route_transitions_cfalavarezb的使用

Flutter路由过渡动画插件route_transitions_cfalavarezb的使用

该插件帮助实现不同屏幕之间的过渡动画。

示例用法

RouteTransitionCfalavarezb(
    context: context, // BuildContext
    child: const Page2(), // 目标页面Widget
    animation: AnimationType.fadeIn, // 动画类型
    // duration: const Duration(seconds: 2), // 动画持续时间
    replacement: false // 是否替换当前页面
);

完整示例代码

example/main.dart

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      debugShowCheckedModeBanner: false,
      initialRoute: 'page1',
      routes: {
        'page1': (_) => const Page1(),
        'page2': (_) => const Page2(),
      },
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Page 1'),
        backgroundColor: Colors.transparent,
      ),
      backgroundColor: Colors.blue,
      body: Center(
        child: MaterialButton(
          color: Colors.white,
          onPressed: () {
            // 使用RouteTransitionCfalavarezb进行页面跳转
            RouteTransitionCfalavarezb(
              context: context,
              child: const Page2(),
              animation: AnimationType.fadeIn,
              // duration: const Duration(seconds: 2),
              replacement: false
            );
          },
          child: const Text('Go to page 2')
        )
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Page 2'),
        backgroundColor: Colors.transparent,
      ),
      backgroundColor: Colors.blueGrey,
      body: const Center(
        child: Text('Page2'),
      ),
    );
  }
}

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

1 回复

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


route_transitions_cfalavarezb 是一个用于在 Flutter 中实现自定义路由过渡动画的插件。它提供了一种简单的方式来定义页面之间的过渡效果,如淡入淡出、滑动、缩放等。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  route_transitions_cfalavarezb: ^1.0.0

然后运行 flutter pub get 来安装插件。

使用插件

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

基本用法

  1. 导入包

    import 'package:route_transitions_cfalavarezb/route_transitions_cfalavarezb.dart';
    
  2. 使用 RouteTransitions 进行页面跳转

    你可以使用 RouteTransitions 提供的各种方法来定义页面之间的过渡动画。例如,使用 fadeIn 方法实现淡入效果:

    RouteTransitions(
      context: context,
      child: SecondPage(), // 目标页面
      animation: AnimationType.fadeIn, // 过渡动画类型
      duration: Duration(milliseconds: 500), // 动画持续时间
      replacement: false, // 是否替换当前页面
    );
    

支持的动画类型

RouteTransitions 支持以下几种动画类型:

  • AnimationType.fadeIn: 淡入效果
  • AnimationType.slideLeft: 从左向右滑动
  • AnimationType.slideRight: 从右向左滑动
  • AnimationType.slideTop: 从上向下滑动
  • AnimationType.slideBottom: 从下向上滑动
  • AnimationType.scale: 缩放效果

自定义动画

你还可以通过 custom 方法来自定义过渡动画:

RouteTransitions(
  context: context,
  child: SecondPage(),
  animation: AnimationType.custom,
  duration: Duration(milliseconds: 500),
  replacement: false,
  customTransition: (context, animation, secondaryAnimation, child) {
    return FadeTransition(
      opacity: animation,
      child: child,
    );
  },
);

替换当前页面

如果你希望在跳转时替换当前页面(类似于 pushReplacement),可以将 replacement 参数设置为 true

RouteTransitions(
  context: context,
  child: SecondPage(),
  animation: AnimationType.fadeIn,
  duration: Duration(milliseconds: 500),
  replacement: true,
);

示例

以下是一个完整的示例,展示了如何使用 route_transitions_cfalavarezb 实现页面之间的过渡动画:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FirstPage(),
    );
  }
}

class FirstPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('First Page')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            RouteTransitions(
              context: context,
              child: SecondPage(),
              animation: AnimationType.fadeIn,
              duration: Duration(milliseconds: 500),
              replacement: false,
            );
          },
          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.pop(context);
          },
          child: Text('Go back'),
        ),
      ),
    );
  }
}
回到顶部