Flutter中文网

Flutter中文网

Flutter Widget组件库:AnimatedContainer

44
2024-07-07

来自Flutter组件库

在Flutter中,创建动画的方式多种多样,其中AnimatedContainer是一个提供了灵活性同时又便于使用的Widget。本文将会对AnimatedContainer进行详细的介绍以及展示如何在实际中应用。

动态创建动效

AnimatedContainer允许你将动画效果应用到一个容器类的widget上。你可以在一个AnimatedContainer上定义大小,颜色,边框,边距,对齐方式等属性,并在这些属性变更时产生平滑的动效过渡。

相对于手动创建和管理AnimationController和Tween,使用AnimatedContainer可以更加简便地创建动效,特别适合一些对动画效果要求不过于复杂的场景。

使用灵活

在AnimatedContainer当中,你可以自定义duration以及curve来控制动画的播放长度以及动效变化的方式。例如,你可以设置curve为Curves.easeIn来让动效以初慢后快的方式变化。同时,你也可以设置duration来控制动画的总播放长度。

示例

下面,我们通过一个具体的例子来查看如何在实际中使用AnimatedContainer。

import 'package:flutter/material.dart';

void main() => runApp(const AnimatedContainerExampleApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('AnimatedContainer Sample')),
        body: const AnimatedContainerExample(),
      ),
    );
  }
}

class AnimatedContainerExample extends StatefulWidget {
  const AnimatedContainerExample({super.key});

  @override
  State<AnimatedContainerExample> createState() =>
      _AnimatedContainerExampleState();
}

class _AnimatedContainerExampleState extends State<AnimatedContainerExample> {
  bool selected = false;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        setState(() {
          selected = !selected;
        });
      },
      child: Center(
        child: AnimatedContainer(
          width: selected ? 200.0 : 100.0,
          height: selected ? 100.0 : 200.0,
          color: selected ? Colors.red : Colors.blue,
          alignment:
              selected ? Alignment.center : AlignmentDirectional.topCenter,
          duration: const Duration(seconds: 2),
          curve: Curves.fastOutSlowIn,
          child: const FlutterLogo(size: 75),
        ),
      ),
    );
  }
}

1720287855793.gif

在这个例子中,我们创建了一个可以改变大小,颜色和对齐方式的动画容器。当用户点击容器时,容器的宽度、高度、颜色以及其内部child的对齐方式会在两秒内按照Curves.fastOutSlowIn的方式平滑过渡到新的状态。

总的来说,AnimatedContainer为开发者提供了一个简单、便捷且强大的方式来添加动画效果。通过灵活地改变其属性和参数,你就可以轻松地创建出具有吸引力的动效。