【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part75 Painting and effects

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

前回

【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part74 Painting and effects

引き続き、Painting and effectsについて学びます。

Painting and effects

Transformウィジェット

Transformウィジェットは子ウィジェットに対して多彩なアニメーションを実現できます。

Transform.rotateコンストラクタ

Transform.rotateコンストラクタはウィジェットの角度を変更できます。

import 'dart:math';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:transparent_image/transparent_image.dart';

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  int _index = 0;
  @override
// pubspec.yamlのdependenciesに「transparent_image: ^2.0.0」を追加しておきます。
// pub getを忘れずに!
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        title: Text('テスト中です。'),
      ),
      body: Transform.rotate(
          angle: pi / 4,
          child: FadeInImage.memoryNetwork(
            placeholder: kTransparentImage,
            image: 'https://picsum.photos/250?image=9',
            fadeInDuration: const Duration(milliseconds: 200),
            width: 100,
            height: 100,
            fit: BoxFit.cover,
          )),
    ));
  }
}

Transform.scaleコンストラクタ

Transform.scaleコンストラクタはウィジェットの拡大・縮小ができます。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:transparent_image/transparent_image.dart';

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  int _index = 0;
  @override
// pubspec.yamlのdependenciesに「transparent_image: ^2.0.0」を追加しておきます。
// pub getを忘れずに!
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        title: Text('テスト中です。'),
      ),
      body: Transform.scale(
          scale: 3,
          child: FadeInImage.memoryNetwork(
            placeholder: kTransparentImage,
            image: 'https://picsum.photos/250?image=9',
            fadeInDuration: const Duration(milliseconds: 200),
            width: 100,
            height: 100,
            fit: BoxFit.cover,
          )),
    ));
  }
}

Transform.translateコンストラクタ

Transform.translateコンストラクタはウィジェットの移動ができます。
・・・移動?どういうこと?

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:transparent_image/transparent_image.dart';

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  int _index = 0;
  @override
// pubspec.yamlのdependenciesに「transparent_image: ^2.0.0」を追加しておきます。
// pub getを忘れずに!
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        title: Text('テスト中です。'),
      ),
      body: Transform.translate(
          offset: Offset(50, 50),
          child: FadeInImage.memoryNetwork(
            placeholder: kTransparentImage,
            image: 'https://picsum.photos/250?image=9',
            fadeInDuration: const Duration(milliseconds: 200),
            width: 100,
            height: 100,
            fit: BoxFit.cover,
          )),
    ));
  }
}

なるほど。しかし他のRowColumnウィジェット使ってきれいに整列されていた場合、このコンストラクタを使うをレイアウトが崩れるのではないですかね?

最後に

ウィジェットの角度を変えたいときというのはどんな時なのでしょう?

今日はここまで!