【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part119 アニメーション系ウィジェット

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は ウィジェット編 ( part119 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part118 アニメーション系ウィジェット

引き続き、アニメーション系について学びます。

カスタムアニメーション

AnimatedBuilderの場合

AnimatedBuilderの場合はbuilderプロパティで変化させるウィジェットを返却します。
AnimatedBuilderにおいてはAniatedWidgetのようにキャッシュを心配しなくてもよいとのことです。

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new MyHomePage()));
}

class MyHomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyHomePageState();
  }
}

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  AnimationController? _controller;

  Animation<double>? _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: const Duration(seconds: 3),
    );

    _animation = _controller!.drive(
      Tween(begin: 0, end: 300),
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'テスト中!',
      theme: ThemeData(primarySwatch: Colors.blue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Stack(
            children: <Widget>[
              AnimatedBuilder(
                animation: _animation!,
                builder: (context, child) {
                  return Container(
                    height: _animation!.value,
                    width: _animation!.value,
                    // 引数からFlutterLogoのインスタンス(コレ)が渡されるにでキャッシュの心配は不要です。
                    child: child,
                  );
                },
                // コレ
                child: const FlutterLogo(),
              )
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            _controller!.forward();
          },
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

実行するとこんな感じになります。

最後に

AnimatedWidgetと同じアニメーションになりました(当たり前)。
AnimatedBuilderのほうがキャッシュを心配しないでよいので少し楽かもしれません。

今日はここまで!