Flutter-内置的动画组件

2022-06-06  本文已影响0人  阿博聊编程
配图来自网络,如侵必删

Flutter的动画开发当中,Flutter SDK也有提供一些内置的动画组件给我们使用。这篇博客就来分享一下有哪些内置的动画组件,希望对小伙伴们有所帮助。

内置的动画组件

动画组件名称 组件的作用
AlignTransition 与Align组件对应的动画组件,可以控制子组件对齐方式的切换。
SlideTransition 可以控制组件偏移位置的动画组件。
ScaleTransition 可以控制组件比例的动画组件。
RotationTransition 可以控制旋转角度的动画组件。
SizeTransition 可以控制大小的动画组件。
FadeTransition 可以控制透明度的动画组件。
RelativePositionedTransition 与Positioned组件对应的动画组件,可以用于组件位置的切换。

简单的使用案例

AlignTransition为例子,因为我不会搞gif图片,我直接上全部代码,可以复制到编译器上面使用:

import 'package:flutter/material.dart';

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

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

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

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  late Animation<Alignment> alignmentAnimation;

  late AnimationController _controller;

  @override
  void initState() {
    super.initState();
    // 初始化动画控制器
    _controller =
        AnimationController(vsync: this, duration: const Duration(seconds: 1));
    // 创建插值为Alignment类型的动画对象
    AlignmentTween alignmentTween =
        AlignmentTween(begin: Alignment.topLeft, end: Alignment.bottomRight);
    alignmentAnimation = alignmentTween.animate(_controller);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(
        height: 200,
        color: Colors.redAccent,
        child: AlignTransition(
          alignment: alignmentAnimation,
          child: Container(
            width: 200,
            height: 100,
            color: Colors.yellowAccent,
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 点击事件,设置动画开始
          _controller.forward();
        },
        child: const Icon(Icons.start),
      ),
    );
  }

  buildItem(String content, Color backgroundColor) {
    return Container(
      width: 100,
      height: 100,
      alignment: Alignment.center,
      color: backgroundColor,
      child: Text(content),
    );
  }
}

动画效果是从左上角到右下角。

上一篇 下一篇

猜你喜欢

热点阅读