Dart 语言 PageRouteBuilder 自定义路由示例

Dart阿木 发布于 2025-06-19 12 次阅读


Dart 语言 PageRouteBuilder 自定义路由示例详解

在Flutter开发中,页面跳转是必不可少的操作。而`PageRouteBuilder`是Flutter中用于创建自定义页面过渡效果的类。本文将围绕`PageRouteBuilder`,通过一个示例来展示如何使用它来自定义路由。

`PageRouteBuilder`是Flutter中用于创建自定义页面过渡效果的类。它允许开发者自定义页面进入和退出的动画效果,使得应用界面更加生动和有趣。通过使用`PageRouteBuilder`,我们可以实现从简单的淡入淡出效果到复杂的自定义动画效果。

环境准备

在开始编写代码之前,请确保你已经安装了Flutter环境,并且已经创建了一个Flutter项目。

示例:自定义页面过渡效果

在这个示例中,我们将创建一个简单的应用,其中包含两个页面:首页和详情页。首页点击按钮后,将跳转到详情页,并使用自定义的页面过渡效果。

1. 创建首页

我们创建一个简单的首页,其中包含一个按钮,点击后将跳转到详情页。

dart

import 'package:flutter/material.dart';

void main() {


runApp(MyApp());


}

class MyApp extends StatelessWidget {


@override


Widget build(BuildContext context) {


return MaterialApp(


title: 'PageRouteBuilder Example',


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,


MaterialPageRoute(


builder: (context) => DetailPage(),


fullscreenDialog: true,


),


);


},


child: Text('Go to Detail Page'),


),


),


);


}


}


2. 创建详情页

接下来,我们创建一个详情页,它将使用`PageRouteBuilder`来实现自定义的页面过渡效果。

dart

class DetailPage extends StatelessWidget {


@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(


title: Text('Detail Page'),


),


body: Center(


child: Text('This is the detail page.'),


),


);


}


}


3. 自定义页面过渡效果

现在,我们将使用`PageRouteBuilder`来自定义页面过渡效果。在这个例子中,我们将实现一个从底部滑入的动画效果。

dart

class CustomPageRoute extends PageRouteBuilder {


@override


Widget buildPage(BuildContext context, Animation<double> animation,


Animation<double> secondaryAnimation) {


return FadeTransition(


opacity: animation,


child: DetailPage(),


);


}

@override


Widget buildTransitions(


BuildContext context,


Animation<double> animation,


Animation<double> secondaryAnimation,


Widget child,


) {


return SlideTransition(


position: Tween<Offset>(


begin: Offset(0.0, 1.0),


end: Offset(0.0, 0.0),


).animate(CurvedAnimation(


parent: animation,


curve: Curves.easeInOut,


)),


child: child,


);


}

@override


bool get barrierDismissible => true;

@override


String get barrierLabel => "Detail Page";

@override


Color get barrierColor => Colors.black.withOpacity(0.5);

@override


Duration get transitionDuration => const Duration(milliseconds: 500);


}


4. 修改首页按钮点击事件

我们需要修改首页按钮的点击事件,使其使用我们自定义的`CustomPageRoute`。

dart

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(),


);


},


child: Text('Go to Detail Page'),


),


),


);


}


}


总结

通过以上示例,我们学习了如何使用`PageRouteBuilder`来创建自定义的页面过渡效果。通过自定义动画,我们可以使应用的界面更加生动和有趣。在实际开发中,可以根据需求设计不同的动画效果,提升用户体验。

扩展阅读

- [Flutter官方文档 - PageRouteBuilder](https://flutter.dev/docs/development/ui/navigation/page-route-builder)

- [Flutter动画教程](https://flutter.dev/docs/development/ui/animations)

希望本文能帮助你更好地理解Flutter中的页面过渡效果。如果你有任何疑问或想法,欢迎在评论区留言交流。