Flutter页面过渡效果插件page_transition_effects的使用

Flutter页面过渡效果插件page_transition_effects的使用

零依赖的空安全插件(Dart 3)

支持iOS、Android、Linux、Mac、Web和Windows平台。

简介

page_transition_effects 插件提供了美观的页面过渡动画效果。它支持多种过渡类型,并且可以实现页面替换 (PushReplacement) 功能。

快速入门

此插件非常简单易用。每个动画都包含默认值,这些默认值看起来非常美观。当然,你也可以根据需要修改属性来定制过渡效果。

支持的动画类型

  • FadeIn
  • SlideUp
  • SlideDown
  • SlideLeft
  • SlideRight

示例代码

基本示例

// 在main.dart文件中定义主应用
import 'package:flutter/material.dart';
import 'package:page_transition_effects/page_transition_effects.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 主应用入口
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: '页面过渡效果演示',
      theme: ThemeData.dark(),
      home: const MyFirstPage(),
    );
  }
}

class MyFirstPage extends StatelessWidget {
  const MyFirstPage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size;

    return Scaffold(
      backgroundColor: Colors.blueGrey,
      body: SizedBox(
        width: size.width,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text(
              '我的第一个页面',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            SizedBox(
              height: size.height * 0.1,
            ),
            ElevatedButton(
              onPressed: () => PageTransitionEffects(
                context: context,
                page: const MySecondPage(),
                animation: AnimationType.slideUp,
                duration: const Duration(milliseconds: 800),
              ),
              child: const Text('正常跳转'),
            ),
            SizedBox(
              height: size.height * 0.1,
            ),
            ElevatedButton(
              onPressed: () => PageTransitionEffects(
                context: context,
                page: const MyThirdPage(),
                animation: AnimationType.slideDown,
                duration: const Duration(milliseconds: 800),
                replacement: true,
              ),
              child: const Text('页面替换'),
            )
          ],
        ),
      ),
    );
  }
}

class MySecondPage extends StatelessWidget {
  const MySecondPage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.brown,
      appBar: AppBar(
        title: const Text('启用返回按钮'),
        backgroundColor: Colors.transparent,
      ),
      body: Center(
        child: Text(
          '我的第二个页面',
          style: Theme.of(context).textTheme.headlineMedium,
        ),
      ),
    );
  }
}

class MyThirdPage extends StatelessWidget {
  const MyThirdPage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.deepPurple,
      appBar: AppBar(
        title: const Text('禁用返回按钮'),
        backgroundColor: Colors.transparent,
      ),
      body: Center(
        child: Text(
          '我的第三个页面(禁用返回按钮)',
          style: Theme.of(context).textTheme.headlineMedium,
        ),
      ),
    );
  }
}

更多关于Flutter页面过渡效果插件page_transition_effects的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter页面过渡效果插件page_transition_effects的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


page_transition_effects 是一个 Flutter 插件,用于在页面导航时添加各种过渡效果。它提供了多种内置的过渡效果,如淡入淡出、缩放、滑动等,可以帮助你创建更加流畅和有趣的页面切换体验。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 page_transition_effects 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  page_transition_effects: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装插件。

使用插件

使用 page_transition_effects 插件非常简单。你可以在 Navigator.pushNavigator.pushReplacement 时使用 PageTransitionEffects 来指定过渡效果。

基本用法

import 'package:flutter/material.dart';
import 'package:page_transition_effects/page_transition_effects.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,
              PageTransitionEffects(
                child: SecondPage(),
                transitionEffect: TransitionEffect.slideLeft, // 使用左侧滑动效果
              ),
            );
          },
          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'),
        ),
      ),
    );
  }
}

支持的过渡效果

PageTransitionEffects 提供了多种内置的过渡效果,你可以通过 transitionEffect 参数来指定:

  • TransitionEffect.fade: 淡入淡出效果
  • TransitionEffect.scale: 缩放效果
  • TransitionEffect.slideLeft: 左侧滑动效果
  • TransitionEffect.slideRight: 右侧滑动效果
  • TransitionEffect.slideTop: 顶部滑动效果
  • TransitionEffect.slideBottom: 底部滑动效果
  • TransitionEffect.rotate: 旋转效果
  • TransitionEffect.size: 大小变化效果

自定义过渡效果

你还可以通过 PageTransitionEffects.custom 来创建自定义的过渡效果。你需要提供一个 PageTransitionBuilder 来定义自定义的过渡动画。

Navigator.push(
  context,
  PageTransitionEffects.custom(
    child: SecondPage(),
    builder: (context, animation, secondaryAnimation, child) {
      return FadeTransition(
        opacity: animation,
        child: ScaleTransition(
          scale: Tween<double>(begin: 0.5, end: 1.0).animate(animation),
          child: child,
        ),
      );
    },
  ),
);
回到顶部