Flutter页面过渡动画插件custom_page_transitions的使用
Flutter页面过渡动画插件custom_page_transitions的使用
该插件帮助以优雅且简单的方式处理屏幕过渡的动画。
使用示例
PageTransitions(
context: context, // BuildContext
child: Page2(), // Widget
animation: AnimationType.material, // AnimationType (插件枚举类型)
duration: Duration(milliseconds: 300), // 动画时长
reverseDuration: Duration(milliseconds: 300), // 反向动画时长
curve: Curves.easeOut, // 动画曲线
fullscreenDialog: false, // 是否为全屏对话框
replacement: false, // 是否替换当前路由
settings: RouteSettings() // 路由设置
);
参数说明
[context] 是应用程序的BuildContext,是必需的。
[child] 是要导航的目标屏幕/Widget,是必需的。
[animation] 通过此参数可以更改动画,是可选的。
[duration] 是动画持续时间,是可选的。
[reverseDuration] 是反向动画持续时间,是可选的。
[settings] 是典型的RouteSettings以传递参数,是可选的。
[replacement] 是标志,用于使用pushReplacement进行导航,是可选的。
[fullscreenDialog] 是标志,指示新屏幕是否为全屏对话框,是可选的。
[curve] 是典型的Curves动画,是可选的。
完整示例代码
import 'package:flutter/material.dart';
import 'package:custom_page_transitions/custom_page_transitions.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: '自定义页面过渡插件App',
initialRoute: 'page1',
routes: {
'page1': (_) => Page1(),
'page2': (_) => Page2(),
},
);
}
}
class Page1 extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('页面 1'),
backgroundColor: Colors.transparent,
),
backgroundColor: Colors.blue,
body: Center(
child: MaterialButton(
child: Text('前往页面 2'),
color: Colors.white,
padding: EdgeInsets.symmetric(vertical: 15, horizontal: 20),
onPressed: () {
// 导航到Page2并设置过渡动画
PageTransitions(
context: context,
child: Page2(),
animation: AnimationType.slideLeft,
duration: Duration(milliseconds: 400),
reverseDuration: Duration(milliseconds: 400),
curve: Curves.decelerate,
fullscreenDialog: false,
replacement: false,
settings: RouteSettings(arguments: '参数') // 传递参数
);
},
),
),
);
}
}
class Page2 extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
final args = ModalRoute.of(context)!.settings.arguments;
print(args); // 打印传递的参数
return Scaffold(
appBar: AppBar(
title: Text('页面 2'),
),
body: Center(
child: Text('页面 2'),
),
);
}
}
更多关于Flutter页面过渡动画插件custom_page_transitions的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter页面过渡动画插件custom_page_transitions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
custom_page_transitions
是一个 Flutter 插件,用于创建自定义的页面过渡动画。它提供了一种简单的方式来定义页面之间的过渡效果,而不需要手动处理复杂的动画逻辑。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 custom_page_transitions
插件的依赖:
dependencies:
flutter:
sdk: flutter
custom_page_transitions: ^1.0.0
然后运行 flutter pub get
来安装插件。
基本用法
custom_page_transitions
插件提供了 CustomPageTransition
类,你可以通过它来定义页面之间的过渡动画。
1. 导入插件
import 'package:custom_page_transitions/custom_page_transitions.dart';
2. 使用 CustomPageTransition
你可以使用 CustomPageTransition
来包装你的页面,并指定过渡动画的类型。
Navigator.push(
context,
CustomPageTransition(
child: YourDestinationPage(),
transitionType: TransitionType.slideLeft, // 选择过渡动画类型
),
);
3. 过渡动画类型
custom_page_transitions
提供了多种内置的过渡动画类型,你可以通过 transitionType
参数来选择:
TransitionType.slideLeft
: 从左向右滑动TransitionType.slideRight
: 从右向左滑动TransitionType.slideTop
: 从上向下滑动TransitionType.slideBottom
: 从下向上滑动TransitionType.fade
: 淡入淡出TransitionType.scale
: 缩放TransitionType.rotate
: 旋转
自定义过渡动画
如果你需要更复杂的过渡动画,你可以通过 CustomPageTransition.custom
构造函数来自定义动画。
Navigator.push(
context,
CustomPageTransition.custom(
child: YourDestinationPage(),
transitionBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
),
);
在这个例子中,transitionBuilder
允许你完全控制页面过渡动画的行为。
完整示例
以下是一个完整的示例,展示了如何使用 custom_page_transitions
插件来实现页面过渡动画:
import 'package:flutter/material.dart';
import 'package:custom_page_transitions/custom_page_transitions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
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: () {
Navigator.push(
context,
CustomPageTransition(
child: SecondPage(),
transitionType: TransitionType.slideLeft,
),
);
},
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'),
),
),
);
}
}