在 Flutter 中,你可以通过自定义路由动画来实现独特的页面切换和过渡效果。Flutter 提供了 PageRouteBuilder
类,允许你自定义页面切换的动画。以下是一个简单的示例,展示如何使用 PageRouteBuilder
实现自定义路由动画。
示例:自定义页面切换动画
import 'package:flutter/material.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: () {
Navigator.of(context).push(_createRoute());
},
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.of(context).pop();
},
child: Text('Go back'),
),
),
);
}
}
Route _createRoute() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => SecondPage(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const end = Offset.zero;
const curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
代码解释:
PageRouteBuilder
: 用于创建自定义路由动画。pageBuilder
定义了要跳转的页面,transitionsBuilder
定义了页面切换的动画效果。
SlideTransition
: 使用 SlideTransition
实现从右到左的滑动动画。Tween
定义了动画的起始和结束位置,Curve
定义了动画的曲线效果。
你可以根据需要调整 transitionsBuilder
中的动画效果,例如使用 FadeTransition
、ScaleTransition
等来实现不同的过渡效果。
其他常用动画:
FadeTransition
: 淡入淡出效果。
ScaleTransition
: 缩放效果。
RotationTransition
: 旋转效果。
通过这些组合,你可以创建出丰富的页面切换动画效果。