Flutter 是一个由 Google 开发,用于构建精美、高性能、跨平台的移动应用的开源框架。动画是提升应用用户体验的关键因素之一。本教程将为您介绍 Flutter 中如何实现各种动画效果。

常用动画类型

在 Flutter 中,常见的动画类型包括:

  • 淡入淡出动画:使元素逐渐显示或消失。
  • 缩放动画:使元素放大或缩小。
  • 平移动画:使元素在水平或垂直方向上移动。
  • 旋转动画:使元素围绕中心点旋转。

淡入淡出动画

以下是一个简单的淡入淡出动画示例:

AnimationController controller;
Animation<double> fadeAnimation;

@override
void initState() {
  super.initState();
  controller = AnimationController(
    duration: Duration(seconds: 2),
    vsync: this,
  );
  fadeAnimation = Tween<double>(begin: 0.0, end: 1.0).animate(controller)
    ..addListener(() {
      setState(() {});
    });
  controller.forward();
}

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

@override
Widget build(BuildContext context) {
  return FadeTransition(
    opacity: fadeAnimation,
    child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.blue,
    ),
  );
}

缩放动画

以下是一个简单的缩放动画示例:

AnimationController controller;
Animation<double> scaleAnimation;

@override
void initState() {
  super.initState();
  controller = AnimationController(
    duration: Duration(seconds: 2),
    vsync: this,
  );
  scaleAnimation = Tween<double>(begin: 0.0, end: 1.0).animate(controller)
    ..addListener(() {
      setState(() {});
    });
  controller.forward();
}

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

@override
Widget build(BuildContext context) {
  return ScaleTransition(
    scale: scaleAnimation,
    child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.blue,
    ),
  );
}

平移动画

以下是一个简单的平移动画示例:

AnimationController controller;
Animation<double> moveAnimation;

@override
void initState() {
  super.initState();
  controller = AnimationController(
    duration: Duration(seconds: 2),
    vsync: this,
  );
  moveAnimation = Tween<double>(begin: -100.0, end: 0.0).animate(controller)
    ..addListener(() {
      setState(() {});
    });
  controller.forward();
}

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

@override
Widget build(BuildContext context) {
  return SlideTransition(
    position: moveAnimation,
    child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.blue,
    ),
  );
}

旋转动画

以下是一个简单的旋转动画示例:

AnimationController controller;
Animation<double> rotateAnimation;

@override
void initState() {
  super.initState();
  controller = AnimationController(
    duration: Duration(seconds: 2),
    vsync: this,
  );
  rotateAnimation = Tween<double>(begin: 0.0, end: 360.0).animate(controller)
    ..addListener(() {
      setState(() {});
    });
  controller.forward();
}

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

@override
Widget build(BuildContext context) {
  return RotationTransition(
    turns: rotateAnimation,
    child: Container(
      width: 100.0,
      height: 100.0,
      color: Colors.blue,
    ),
  );
}

扩展阅读

更多关于 Flutter 动画的教程,您可以访问我们的 Flutter 动画教程 页面。


Flutter 动画