Flutter序列动画插件flutter_sequence_animation的使用

Flutter序列动画插件flutter_sequence_animation的使用

Features

  • 不需要使用间隔和计算总动画时间的百分比。
  • 可以用多个Animatable动画化相同的变量!
  • 你只需要一个AnimationController
  • 界面直观且易于使用

Installation

pubspec.yaml文件中添加依赖:

dependencies:
  flutter_sequence_animation: "^4.0.0"

然后运行以下命令来获取包:

$ flutter packages get

最后,在Dart文件中导入包:

import 'package:flutter_sequence_animation/flutter_sequence_animation.dart';

Demo

以下是几个示例演示,你可以从这些GIF中了解如何使用该插件创建动画效果:

颜色变化动画 大小变化动画 交错动画

Code

创建序列动画

你可以像下面这样指定一组动画:

sequenceAnimation = new SequenceAnimationBuilder()
  .addAnimatable(
      animatable: new ColorTween(begin: Colors.red, end: Colors.yellow),
      from: const Duration(seconds: 0),
      to: const Duration(seconds: 2),
      tag: "color"
    ).addAnimatable(
      animatable: new ColorTween(begin: Colors.yellow, end: Colors.blueAccent),
      from: const Duration(seconds: 2),
      to: const Duration(seconds: 4),
      tag: "color",
      curve: Curves.easeOut
    ).addAnimatable(
      animatable: new ColorTween(begin: Colors.blueAccent, end: Colors.pink),
      from: const Duration(seconds: 5),
      to: const Duration(seconds: 6),
      tag: "color",
      curve: Curves.fastOutSlowIn
    ).animate(controller);

注意:在这个例子中只对颜色进行了动画处理,但你可以为序列添加尽可能多的不同属性。唯一的限制是具有相同标签的动画不能重叠并且必须有序。

访问结果动画

可以在代码中的任何位置通过如下方式访问结果动画:

sequenceAnimation["color"]

此动画是你传递的所有具有相同标签的Animatable的组合。

示例用法

这是如何在AnimatedBuilder中使用上面定义的动画的例子:

new AnimatedBuilder(
      builder: (context, child) {
        return new Center(
          child: new Container(
            color: sequenceAnimation["color"].value,
            height: 200.0,
            width: 200.0,
          ),
        );
      },
      animation: controller,
    ),

注意:动画持续时间是自动设置的(不要自己更改控制器的持续时间)。

Special Thanks

特别感谢Simon Lightfoot的帮助!

Getting Started

有关Flutter入门的帮助,请查看我们的在线文档

有关编辑包代码的帮助,请参阅文档

完整的示例demo

下面是完整的示例demo,它展示了如何将不同的动画页面集成到一个应用中,并可以通过按钮导航到各个动画示例页面:

import 'package:flutter/material.dart';

import 'same_variable_multiple_animations.dart';
import 'sequence_page.dart';
import 'staggered_animation_replication.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new HomePage(),
      routes: {
        'sequence': (_) => new SequencePage(),
        'StaggeredAnimationReplication': (_) => new StaggeredAnimationReplication(),
        'SameVariableAnimationPage': (_) => new SameVariableAnimationPage(),
      },
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => new _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Examples"),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new RaisedButton(onPressed: (){Navigator.pushNamed(context, 'sequence');}, child: new Text("Sequence"),),
            new RaisedButton(onPressed: (){Navigator.pushNamed(context, 'StaggeredAnimationReplication');}, child: new Text("Staggered Animation Replication"),),
            new RaisedButton(onPressed: (){Navigator.pushNamed(context, 'SameVariableAnimationPage');}, child: new Text("Same Variable Multiple Animations"),),
          ],
        ),
      )
    );
  }
}

以上就是关于flutter_sequence_animation插件的介绍和使用方法,希望对你有所帮助。


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

1 回复

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


当然,以下是一个关于如何在Flutter中使用flutter_sequence_animation插件来创建序列动画的示例代码。这个插件允许你通过定义动画帧的顺序来创建复杂的动画。

首先,确保你已经在pubspec.yaml文件中添加了flutter_sequence_animation依赖:

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

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

接下来是一个完整的示例代码,它展示了如何使用flutter_sequence_animation来创建一个简单的序列动画:

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

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

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

class SequenceAnimationExample extends StatefulWidget {
  @override
  _SequenceAnimationExampleState createState() => _SequenceAnimationExampleState();
}

class _SequenceAnimationExampleState extends State<SequenceAnimationExample> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late SequenceAnimation _sequenceAnimation;

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

    _sequenceAnimation = SequenceAnimationBuilder()
      .addAnimatable(
        animatable: Animatable.springs(
          stiffness: 700.0,
          damping: 20.0,
          initialValue: 0.0,
          endValue: 1.0,
        ),
        builder: (context, animation) => Transform.scale(
          scale: animation.value,
          child: Container(
            width: 100,
            height: 100,
            color: Colors.red,
          ),
        ),
      )
      .addAnimatable(
        delay: const Duration(milliseconds: 500),
        animatable: Animatable.fades(
          initialOpacity: 0.0,
          endOpacity: 1.0,
        ),
        builder: (context, animation) => Container(
          color: Colors.transparent,
          child: Center(
            child: Text(
              'Hello, World!',
              style: TextStyle(
                fontSize: 24,
                color: Colors.blue,
                opacity: animation.value,
              ),
            ),
          ),
        ),
      )
      .build();
  }

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

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _controller,
      child: _sequenceAnimation.build(context),
      builder: (context, child) {
        return child;
      },
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个序列动画。动画由两部分组成:

  1. 一个红色的方块,通过Transform.scale动画从原始大小缩放到两倍大小。
  2. 一个文本“Hello, World!”,通过Animatable.fades动画从完全透明渐变到完全不透明,并且有一个500毫秒的延迟。

SequenceAnimationBuilder允许你按顺序添加多个动画,每个动画可以指定延迟、动画类型和构建器函数。最后,通过AnimatedBuilder将动画控制器和序列动画组合在一起,并在UI中渲染。

请根据你的具体需求调整动画的属性和参数。

回到顶部