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

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

前回

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

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

AnimatedControllerを利用しないウィジェット

AnimatedSwitcherウィジェット

AnimatedSwitcherウィジェットはchildプロパティに指定されているウィジェットを切り替える際にアニメーションを行います。
少し特殊なウィジェットです。

本書のサンプルではContainerウィジェットからSizedBoxに変化させています。

import 'package:flutter/foundation.dart';
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> {
  var isVisible = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'テスト中!',
      theme: ThemeData(primarySwatch: Colors.blue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: AnimatedSwitcher(
            duration: Duration(seconds: 3),
            child: isVisible
                ? Container(
                    height: 100.0,
                    width: 100.0,
                    color: Colors.red.shade400,
                  )
                : const SizedBox.shrink(),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            setState(() {
              isVisible = !isVisible;
            });
          },
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  final ValueListenable<int> number;

  MyWidget(this.number);

  @override
  Widget build(BuildContext context) {
    return new Text(number.value.toString());
  }
}

なんだかかっこいいアニメーションになりましたね!

最後に

本書ではSizedBoxの部分がSizeBoxになっています。おそらく誤記です。

今日はここまで!