在Flutter中,你可以使用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.push(
context,
CustomPageRoute(builder: (context) => SecondPage()),
);
},
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.pop(context);
},
child: Text('Go Back'),
),
),
);
}
}
class CustomPageRoute extends PageRouteBuilder {
final WidgetBuilder builder;
CustomPageRoute({required this.builder})
: super(
pageBuilder: (context, animation, secondaryAnimation) => builder(context),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
var curve = Curves.easeInOut;
var curveTween = CurveTween(curve: curve);
var begin = Offset(1.0, 0.0);
var end = Offset.zero;
var tween = Tween(begin: begin, end: end).chain(curveTween);
var offsetAnimation = animation.drive(tween);
return SlideTransition(
position: offsetAnimation,
child: child,
);
},
transitionDuration: Duration(milliseconds: 500),
);
}
代码说明:
CustomPageRoute
:这是一个自定义的PageRouteBuilder
,用于定义页面切换时的动画效果。
transitionsBuilder
:在这个方法中,你可以定义页面进入和退出时的动画效果。这里使用了SlideTransition
来实现页面从右侧滑入的效果。
CurveTween
:用于定义动画的曲线,使动画更加平滑。
transitionDuration
:定义动画的持续时间。
通过这种方式,你可以轻松地实现各种复杂的页面切换动画,并且可以通过调整transitionsBuilder
中的代码来实现不同的动画效果。