Flutter自定义页面路由插件custom_page_route的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter 自定义页面路由插件 custom_page_route 的使用

在 Flutter 中,custom_page_route 是一个用于实现自定义动画页面路由的插件。通过这个插件,你可以轻松地为页面跳转添加各种动画效果。

Getting Started(入门)

CustomPageRoute 类构造函数接受以下参数:

  • child: 目标页面的组件。
  • axisDirection: 动画的方向,默认为 AxisDirection.right
  • transitionDuration: 跳转时长,默认为 500 毫秒。
  • reverseTransitionDuration: 返回时长,默认为 500 毫秒。
CustomPageRoute({
    required Widget child,
    AxisDirection axisDirection = AxisDirection.right,
    Duration transitionDuration = const Duration(milliseconds: 500), 
    Duration reverseTransitionDuration = const Duration(milliseconds: 500)
})

示例代码

下面是一个完整的示例,展示了如何使用 custom_page_route 插件来实现不同方向的页面跳转动画。

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

// 定义两个页面类
class Page1 extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Page 1')),
      body: Center(child: Text('This is Page 1')),
    );
  }
}

class Page2 extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Page 2')),
      body: Center(child: Text('This is Page 2')),
    );
  }
}

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Animated Page Route"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 按钮:向左滑动到 Page 1
            MaterialButton(
              color: Theme.of(context).primaryColor,
              onPressed: () {
                Navigator.push(
                  context,
                  CustomPageRoute(
                    axisDirection: AxisDirection.left,
                    child: Page1(),
                  ),
                );
              },
              child: Text("Go to Page 1"),
            ),
            const SizedBox(height: 20),
            
            // 按钮:向上滑动到 Page 2
            MaterialButton(
              color: Theme.of(context).primaryColor,
              onPressed: () {
                Navigator.push(
                  context,
                  CustomPageRoute(
                    transitionDuration: Duration(seconds: 5),
                    reverseTransitionDuration: Duration(seconds: 5),
                    axisDirection: AxisDirection.up,
                    child: Page2(),
                  ),
                );
              },
              child: Text("Go to Page 2"),
            ),
            const SizedBox(height: 20),
            
            // 按钮:向下滑动到 Page 2
            MaterialButton(
              color: Theme.of(context).primaryColor,
              onPressed: () {
                Navigator.push(
                  context,
                  CustomPageRoute(
                    transitionDuration: Duration(seconds: 5),
                    reverseTransitionDuration: Duration(seconds: 5),
                    axisDirection: AxisDirection.down,
                    child: Page2(),
                  ),
                );
              },
              child: Text("Go to Page 3"),
            ),
            const SizedBox(height: 20),
            
            // 按钮:向右滑动到 Page 2
            MaterialButton(
              color: Theme.of(context).primaryColor,
              onPressed: () {
                Navigator.push(
                  context,
                  CustomPageRoute(
                    transitionDuration: Duration(seconds: 5),
                    reverseTransitionDuration: Duration(seconds: 5),
                    axisDirection: AxisDirection.right,
                    child: Page2(),
                  ),
                );
              },
              child: Text("Go to Page 4"),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter自定义页面路由插件custom_page_route的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义页面路由插件custom_page_route的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用自定义页面路由插件 custom_page_route 的代码案例。首先,你需要确保你的 Flutter 项目中已经添加了 custom_page_route 插件。如果还没有添加,可以在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  custom_page_route: ^最新版本号  # 请替换为最新的版本号

然后运行 flutter pub get 来安装依赖。

接下来,我们将展示如何使用 custom_page_route 插件来创建自定义页面路由。

1. 创建自定义路由动画

首先,我们需要定义一个自定义路由动画。例如,我们创建一个简单的从右向左滑入的动画。

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

class SlideInRoute extends PageRouteBuilder<void> {
  final Widget page;

  SlideInRoute({required this.page})
      : super(
            pageBuilder: (context, animation, secondaryAnimation) => page,
            transitionsBuilder: (
              context,
              animation,
              secondaryAnimation,
              child,
            ) {
              return SlideTransition(
                position: Tween<Offset>(
                  begin: const Offset(1.0, 0.0),
                  end: Offset.zero,
                ).animate(animation),
                child: child,
              );
            });
}

2. 使用自定义路由导航

现在,我们可以在 Flutter 应用中使用这个自定义路由进行页面导航。

import 'package:flutter/material.dart';
import 'package:custom_page_route/custom_page_route.dart'; // 确保已经导入
import '自定义路由动画文件.dart'; // 替换为实际的文件路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              SlideInRoute(page: 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: Text('This is the second page!'),
      ),
    );
  }
}

3. 运行应用

现在你可以运行你的 Flutter 应用,点击按钮时会使用 SlideInRoute 自定义路由动画从右向左滑入到第二个页面。

这个代码案例展示了如何使用 custom_page_route 插件来创建和使用自定义页面路由动画。你可以根据需要进一步定制动画效果和页面过渡效果。

回到顶部