[Flutter]Containerのサイズを変えるアニメーションをするには?

Flutter

どうも、ちょげ(@chogetarou)です。

Containerのサイズを変えるアニメーションをする方法を紹介します。

スポンサーリンク

方法

Containerのサイズを変えるアニメーションをするには、Containerの代わりにAnimaterContainerを使います。

AnimatedContainerは、アニメーションの機能がついたContainerです。

まず、サイズを変えるための変数を用意します。

var _isChanged = false;

そして、AnimatedContainerの引数「width」で横幅、引数「hegiht」で高さを設定します。

この横幅と高さは、用意した変数と三項演算子で切り替わるようにします。

また、引数「duration」でアニメーションの時間を設定します。

AnimatedContainer(
  duration: Duration(/*アニメーションの時間*/),
  width: _isChanged ? /*アニメーション後の横幅*/ : /*アニメーション前の横幅*/,
  height: _isChanged ? /*アニメーション後の高さ*/ : /*アニメーション前の高さ*/,
),

AnimatedContainerは、サイズを変えると自動的にアニメーションが起こります。

最後にボタンなどで変数の値を切り替える処理をします。

ElevatedButton(
  onPressed: () {
    setState(() {
      _isChanged = !_isChanged;
    });
  },
  child: Text('Change'),
),

これでContainerでサイズを変えるアニメーションをすることが出来ます。

以下は、例です。

使用例
class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  var _isChanged = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            AnimatedContainer(
              duration: Duration(seconds: 2), //2秒
              curve: Curves.bounceIn,
              width: _isChanged ? 200 : 100,
              height: _isChanged ? 300 : 50,
              color: Colors.pink,
            ),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _isChanged = !_isChanged;
                });
              },
              child: Text('Change'),
            ),
          ],
        ),
      ),
    );
  }
}

コメント

タイトルとURLをコピーしました