サイトアイコン 【TechGrowUp】

Flutter開発入門54 AnimatedWidgetを使った簡潔なアニメーション管理

はじめに

Flutterでアニメーションを作成すると、時折コードが複雑になりがちです。特に、アニメーションの進行に伴ってUIのリビルドが必要になる場合、コードの可読性やパフォーマンスが問題になることがあります。そんなときに役立つのが、AnimatedWidgetです。

AnimatedWidgetは、Flutterでアニメーションの実装をシンプルかつ効率的に行うためのウィジェットです。AnimatedBuilderに似ていますが、アニメーションに直接影響するウィジェットのみをリビルドするという点で、さらに簡潔なコードを書けるように設計されています。この記事では、AnimatedWidgetを使ってコードを簡素化し、アニメーションを効率的に管理する方法を解説します。

AnimatedWidgetとは

AnimatedWidgetは、Flutterにおけるアニメーションのウィジェットを作成する際に、再ビルドの範囲を最小限に抑えるための便利なツールです。AnimatedBuilderを使用する場合に比べて、アニメーションロジックをさらにウィジェット化し、コードの簡素化を促進します。

主な特徴

AnimatedWidgetの使い方

AnimatedWidgetを使ったリファクタリングの例

以下は、AnimationControllerを使ったスケールアニメーションをAnimatedWidgetでシンプルに実装した例です。これにより、コードが整理され、アニメーションの進行に応じて必要な部分だけを再描画します。

AnimatedWidgetの実装例
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AnimationExample(),
    );
  }
}

class AnimationExample extends StatefulWidget {
  @override
  _AnimationExampleState createState() => _AnimationExampleState();
}

class _AnimationExampleState extends State<AnimationExample> with TickerProviderStateMixin {
  late AnimationController _controller;

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Using AnimatedWidget')),
      body: Center(
        child: ScaleTransitionWidget(controller: _controller),
      ),
    );
  }
}

class ScaleTransitionWidget extends AnimatedWidget {
  ScaleTransitionWidget({Key? key, required AnimationController controller})
      : super(key: key, listenable: controller);

  @override
  Widget build(BuildContext context) {
    final Animation<double> animation = listenable as Animation<double>;
    return Transform.scale(
      scale: animation.value + 1, // スケール値を変化させる
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
    );
  }
}

AnimatedWidgetを使った実装の解説

主要なポイント

AnimatedWidgetのメリット

AnimatedBuilderとの違い

AnimatedWidgetAnimatedBuilderは、どちらもFlutterでのアニメーション管理に使用されますが、役割や使い方に微妙な違いがあります。

AnimatedWidgetの特徴

AnimatedBuilderの特徴

AnimatedWidgetの活用シーン

まとめ

Flutterでアニメーションを効率的に実装するには、AnimatedWidgetを活用することでコードの整理やパフォーマンスの向上が期待できます。AnimatedBuilderと比較して、シンプルなアニメーションに特化しており、ウィジェットの再利用やパフォーマンスの最適化に大いに役立ちます。

今回紹介した手法を参考にして、Flutterアプリのアニメーションをシンプルに管理し、より洗練されたユーザーインターフェースを作成してみましょう!

モバイルバージョンを終了