Flutterのアニメーションについて

長くなるので、分けることにしました。今日は1日目

目次

アニメーションの基本

アニメーションって何?
アニメーションは、値を時間をかけて変化させること!
比喩で言うと: 電気のスイッチではなく、調光器のようなもの。

スイッチ: パチッ(OFF → ON)
調光器: じわ〜っ(暗い → 明るい)

Flutterのアニメーション 3つの種類

1️⃣ 暗黙的アニメーション (Implicit)

特徴:

  • 超簡単! 初心者向け
  • 自動でアニメーション
  • コード量が少ない

例: AnimatedContainer, AnimatedOpacity
使う場面: ボタンの色変化、サイズ変更、フェードイン/アウト

2️⃣ 明示的アニメーション (Explicit)

特徴:

  • 細かく制御できる
  • ちょっと複雑
  • カスタマイズ自由

例: AnimationController, Tween
使う場面: 回転、複雑な動き、繰り返し

3️⃣ Hero アニメーション

特徴:

  • 画面遷移で使う
  • かっこいい!
  • 簡単

例: 写真タップで拡大
使う場面: 詳細画面への遷移

使い方のコツ

アニメーションは控えめに

// ❌ やりすぎ
AnimatedContainer(
  duration: Duration(seconds: 2),  // 長すぎ!
  curve: Curves.elasticOut,        // 派手すぎ!
)

// ✅ 適度
AnimatedContainer(
  duration: Duration(milliseconds: 300),
  curve: Curves.easeInOut,
)

ルール: アニメーションは脇役。主役はコンテンツ!

一貫性を保つ

// アプリ全体で統一
class AppAnimations {
  static const Duration fast = Duration(milliseconds: 150);
  static const Duration normal = Duration(milliseconds: 300);
  static const Duration slow = Duration(milliseconds: 500);
  
  static const Curve defaultCurve = Curves.easeInOut;
}

// 使う
AnimatedContainer(
  duration: AppAnimations.normal,
  curve: AppAnimations.defaultCurve,
)

ルール: アニメーションは脇役。主役はコンテンツ!

パフォーマンスを意識

// ✅ 良い - 軽い
AnimatedOpacity(opacity: 0.5, ...)
AnimatedContainer(color: Colors.red, ...)

// ⚠️ 注意 - 重い
AnimatedContainer(
  decoration: BoxDecoration(
    gradient: LinearGradient(...),  // グラデーションは重い
    boxShadow: [...]  // 影も重い
  ),
)

ルール: アニメーションは脇役。主役はコンテンツ!



Flutterのアニメーションについては、明日以降長くなるので分けてまとめていこうと思います

1: 暗黙的アニメーション(簡単!)
2: 明示的アニメーション(細かい制御)
3: Hero アニメーション(画面遷移)
4: パッケージ(Lottie など)

目次