Flutter动画变换插件animated_transform的使用

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

Flutter动画变换插件animated_transform的使用

Pub Version GitHub Buy Me A Coffee Ko-Fi

animated_transform 是一个Flutter插件,它允许你动态地缩放、旋转、翻转和定位子组件,并且带有动画效果。你可以通过简单的属性设置来实现这些效果。

Preview

你可以在这里查看 Demo

使用方法

要了解更多关于 animated_transform 的类和其他引用,请参阅 API Reference

示例代码

下面是一个完整的示例代码,展示了如何使用 animated_transform 插件来创建一个可以旋转、缩放和翻转的 FlutterLogo。

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Animated Transform Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Animated Transform Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double _rotate = 0;
  double _scale = 1;
  bool _flipX = false;
  bool _flipY = false;

  void _increaseRotate() {
    setState(() {
      _rotate += 45;
    });
  }

  void _decreaseRotate() {
    setState(() {
      _rotate -= 45;
    });
  }

  void _increaseScale() {
    setState(() {
      _scale += .5;
    });
  }

  void _decreaseScale() {
    setState(() {
      _scale -= .5;
    });
  }

  void _toggleFlipX() {
    setState(() {
      _flipX = !_flipX;
    });
  }

  void _toggleFlipY() {
    setState(() {
      _flipY = !_flipY;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              decoration: BoxDecoration(
                border: Border.all(
                  color: Colors.black26,
                ),
              ),
              child: AnimatedTransform(
                rotate: _rotate,
                flipX: _flipX,
                flipY: _flipY,
                scale: _scale,
                child: const FlutterLogo(size: 100),
              ),
            ),
            const SizedBox(height: 30),
            Wrap(
              spacing: 5,
              children: [
                IconButton.outlined(
                  onPressed: _decreaseRotate,
                  icon: const Icon(Icons.rotate_left),
                ),
                IconButton.outlined(
                  onPressed: _decreaseScale,
                  icon: const Icon(Icons.keyboard_double_arrow_down),
                ),
                IconButton.outlined(
                  onPressed: _increaseScale,
                  icon: const Icon(Icons.keyboard_double_arrow_up),
                ),
                IconButton.outlined(
                  onPressed: _increaseRotate,
                  icon: const Icon(Icons.rotate_right),
                ),
              ],
            ),
            const SizedBox(height: 10),
            Wrap(
              spacing: 5,
              children: [
                IconButton.outlined(
                  onPressed: _toggleFlipX,
                  icon: const Icon(Icons.compare_arrows),
                ),
                RotatedBox(
                  quarterTurns: 1,
                  child: IconButton.outlined(
                    onPressed: _toggleFlipY,
                    icon: const Icon(Icons.compare_arrows),
                  ),
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}

主要功能

  • 旋转:通过 rotate 属性设置旋转角度。
  • 缩放:通过 scale 属性设置缩放比例。
  • 翻转:通过 flipXflipY 属性分别设置沿X轴和Y轴的翻转。
  • 动画效果:所有变换都会带有平滑的动画效果。

如何安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  animated_transform: ^latest_version

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

希望这个插件能帮助你更轻松地实现复杂的动画效果!如果你有任何问题或建议,请随时联系我。


如果你觉得这个包对你有帮助,欢迎赞助我,以便我能有更多时间来维护和改进这些包。

Buy Me A Coffee Ko-Fi

感谢支持!


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

1 回复

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


当然,下面是一个关于如何使用 animated_transform 插件进行 Flutter 动画变换的示例代码。animated_transform 插件允许你对 Flutter 中的 Widget 进行动画化的变换操作,比如旋转、缩放、平移等。

首先,确保你已经在 pubspec.yaml 文件中添加了 animated_transform 依赖(如果它是一个独立的插件;如果它是 Flutter 自带的功能,则不需要添加)。然而,由于 Flutter 自带的动画功能已经非常强大,通常不需要额外的插件,我们可以直接使用 Flutter 的 AnimatedBuilderTransform widget 来实现动画变换。

以下是一个使用 Flutter 内置功能实现动画变换的示例代码:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Animated Transform Example'),
        ),
        body: Center(
          child: AnimatedTransformWidget(),
        ),
      ),
    );
  }
}

class AnimatedTransformWidget extends StatefulWidget {
  @override
  _AnimatedTransformWidgetState createState() => _AnimatedTransformWidgetState();
}

class _AnimatedTransformWidgetState extends State<AnimatedTransformWidget> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _rotation;
  late Animation<double> _scale;
  late Animation<Offset> _translation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 2),
      vsync: this,
    )..repeat(reverse: true);

    _rotation = Tween<double>(begin: 0.0, end: 2.0 * 3.141592653589793).animate(
      CurvedAnimation(
        parent: _controller,
        curve: Curves.linear,
      ),
    );

    _scale = Tween<double>(begin: 1.0, end: 1.5).animate(
      CurvedAnimation(
        parent: _controller,
        curve: Curves.easeInOut,
      ),
    );

    _translation = Tween<Offset>(begin: Offset.zero, end: Offset(0.5, 0.5)).animate(
      CurvedAnimation(
        parent: _controller,
        curve: Curves.elasticInOut,
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _controller,
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
      builder: (context, child) {
        return Transform(
          transform: Matrix4.identity()
            ..setEntry(3, 2, 0.001) // apply perspective
            ..rotateY(_rotation.value)
            ..scale(_scale.value, _scale.value, 1.0)
            ..translate(_translation.value.dx * 200, _translation.value.dy * 200, 0),
          alignment: Alignment.center,
          child: child,
        );
      },
    );
  }
}

解释

  1. AnimationController: 控制动画的时长和重复行为。
  2. Tween: 定义了动画的起始值和结束值。
  3. CurvedAnimation: 使用曲线来控制动画的速度变化。
  4. AnimatedBuilder: 用于构建动画的 Widget,它在每次动画值变化时都会重建子 Widget。
  5. Transform: 使用 Matrix4 进行3D变换,包括旋转、缩放和平移。

在这个例子中,一个蓝色的方块会沿着 Y 轴旋转、缩放,并在 X 和 Y 轴上平移。动画会反复进行,并在每次动画结束时反向播放。

注意:如果你确实需要使用一个名为 animated_transform 的特定插件,并且它不是 Flutter 自带的功能,请确保你查阅了该插件的官方文档,因为插件的 API 可能与 Flutter 自带的动画 API 有所不同。

回到顶部