Flutter页面过渡动画插件cube_transition_plus的使用

Flutter页面过渡动画插件cube_transition_plus的使用

插件介绍

cube_transition 是一个用于在 PageViewPageRoute 之间添加3D立方体过渡效果的插件。它提供了多种自定义选项,如控制立方体的缩放、旋转等。

安装插件

首先,在你的Flutter项目中添加依赖项:

dependencies:
  cube_transition: "^1.0.0"

然后运行 flutter packages upgrade 或者在IntelliJ中更新包。

示例代码

下面是一个完整的示例项目,展示了如何使用cube_transition插件实现不同的过渡效果。

import 'package:flutter/material.dart';
import 'sample1.dart';
import 'sample2.dart';
import 'sample3.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark(),
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  void _onTap(BuildContext context, Widget page) {
    Navigator.of(context).push(MaterialPageRoute(
      builder: (_) => page,
    ));
  }

  @override
  Widget build(BuildContext context) {
    const separator = SizedBox(height: 15);
    return Scaffold(
      appBar: AppBar(
        title: Text("Examples"),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            RaisedButton(
              child: Text("Navigator Cube Transition"),
              onPressed: () => _onTap(context, Sample1()),
            ),
            separator,
            RaisedButton(
              child: Text("PageView Cube Transition"),
              onPressed: () => _onTap(context, Sample2()),
            ),
            separator,
            RaisedButton(
              child: Text("PageView Cube Transition Custom"),
              onPressed: () => _onTap(context, Sample3()),
            ),
          ],
        ),
      ),
    );
  }
}

示例说明

  1. Navigator Cube Transition

    • 示例 Sample1 展示了如何在导航器之间使用立方体过渡。
    class Sample1 extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Navigator Cube Transition'),
          ),
          body: Center(
            child: RaisedButton(
              child: Text('Next Page'),
              onPressed: () {
                Navigator.of(context).push(
                  CubePageRoute(
                    enterPage: SampleNextPage(),
                    exitPage: this,
                    duration: const Duration(milliseconds: 900),
                  ),
                );
              },
            ),
          ),
        );
      }
    }
    
    • 这个示例创建了一个简单的的导航器,并在点击按钮时触发立方体过渡。
  2. PageView Cube Transition (default)

    • 示例 Sample2 展示了默认的立方体过渡效果。
    class Sample2 extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final height = MediaQuery.of(context).size.height / 2;
        return Scaffold(
          appBar: AppBar(
            title: Text('PageView Cube Transition'),
          ),
          body: Center(
            child: SizedBox(
              height: height,
              child: CubePageView(
                children: places.map((item) >> Image.network(item.url, height: height, fit: BoxFit.cover)).toList(),
              ),
            ),
          ),
        );
      }
    }
    
    • 这个示例展示了一个简单的的 PageView,其中每个条目都会进行立方体过渡。
  3. PageView Cube Transition Custom

    • 示例 Sample3 展示了自定义立方体过渡效果。
    class Sample3 extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final height = MediaQuery.of(context).size.height / 2;
        return Scaffold(
          appBar: AppBar(
            title: Text('Custom Cube Transition'),
          ),
          body: Center(
            child: SizedBox(
              height: height,
              child: CubePageView.builder(
                itemCount: places.length,
                itemBuilder: (context, index, notifier) {
                  final item = places[index];
                  final transform = Matrix4.identity();
                  final t = (index - notifier).abs();
                  final scale = lerpDouble(1.5, 0, t);
                  transform.scale(scale, scale);
                  return CubeWidget(
                    index: index,
                    pageNotifier: notifier,
                    child: Stack(
                      children: [
                        Image.network(item.url, height: height, fit: BoxFit.cover),
                        Transform(
                          alignment: Alignment.center,
                          transform: transform,
                          child: Center(
                            child: Padding(
                              padding: EdgeInsets.all(12.0),
                              child: Container(
                                decoration: BoxDecoration(boxShadow: [
                                  BoxShadow(color: Colors.black45, spreadRadius: 5, blurRadius: 5),
                                ]),
                                child: Text(
                                  item.name.split('-').join('\n'),
                                  textAlign: TextAlign.center,
                                  style: Theme.of(context).textTheme.title,
                                ),
                              ),
                            ),
                          ),
                        ),
                      ],
                    ),
                  );
                },
              ),
            ),
          ),
        );
      }
    }
    

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

1 回复

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


当然,以下是如何在Flutter项目中使用cube_transition_plus插件来实现页面过渡动画的代码示例。cube_transition_plus是一个提供立方体过渡动画效果的插件,适用于页面间的导航。

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

dependencies:
  flutter:
    sdk: flutter
  cube_transition_plus: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来获取依赖。

接下来,你可以在Flutter项目中实现页面过渡动画。下面是一个简单的示例,演示如何使用CubeTransitionPageRoute进行页面导航。

主页面 (main.dart)

import 'package:flutter/material.dart';
import 'package:cube_transition_plus/cube_transition_plus.dart';
import 'second_page.dart';

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cube Transition Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              CubeTransitionPageRoute(
                builder: (_) => SecondPage(),
                transitionDuration: Duration(milliseconds: 800),
                reverseTransitionDuration: Duration(milliseconds: 800),
                cubeRotationAxis: CubeRotationAxis.x, // 可以是 .x, .y, 或 .z
              ),
            );
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

第二页面 (second_page.dart)

import 'package:flutter/material.dart';

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!'),
      ),
    );
  }
}

代码解释

  1. 依赖添加:在pubspec.yaml文件中添加cube_transition_plus依赖。

  2. 主页面

    • 使用MaterialApp来构建应用。
    • MyHomePage包含一个按钮,当按钮被点击时,使用Navigator.push进行页面导航。
    • CubeTransitionPageRoute用于创建带有立方体过渡动画的页面路由。
    • transitionDurationreverseTransitionDuration定义了动画的时长。
    • cubeRotationAxis定义了立方体旋转的轴,可以是.x.y.z
  3. 第二页面:一个简单的页面,包含一个文本。

这个示例展示了如何在Flutter应用中使用cube_transition_plus插件来实现页面间的立方体过渡动画。你可以根据需要调整动画参数,如持续时间、旋转轴等,以实现不同的视觉效果。

回到顶部