【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part11 基本的なウィジェット

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

前回

【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part10 基本的なウィジェット

引き続き、基本的なウィジェットについて学びます。

基本的なウィジェット

Image,RowImageウィジェット

gaplessPlaybackプロパティ

画像を切り替えるする際、一瞬白いちらつくとこがあります。

gaplessPlaybackプロパティをtrueにすると新しい画像が表示されるまで古い画像が残りちらつきを防ぐことができます。

なんとか画像切り替えるサンプル作成できました!
これであっているか・・・。

  • gaplessPlayback がfalseの場合
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

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

var ok = false;

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

class _State extends State<MyApp> {
  int count = 0;
  // gaplessPlaybackをfalseに設定しました。
  Image img = Image.asset('images/flutter.jpg', gaplessPlayback: false);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('テスト中です。'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Container(child: img),
              Container(
                  child: ElevatedButton(
                      child: Text("button"), onPressed: _onPressed))
            ],
          ),
        ),
      ),
    );
  }

  void _onPressed() {
    setState(() {
      if (ok == false) {
        print("false");
        ok = true;
        // 画像切り替え
        img = Image.asset('images/cat_nekoko.png', gaplessPlayback: false);
      } else {
        print("true");
        ok = false;
        // 画像切り替え
        img = Image.asset('images/flutter.jpg', gaplessPlayback: false);
      }
    });
  }
}

確認します。

ん~・・・わかりませんね!

猫かわいいです😍

  • aplessPlayback がtrueの場合
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

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

var ok = false;

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

class _State extends State<MyApp> {
  int count = 0;
  // gaplessPlaybackをfalseに設定しました。
  Image img = Image.asset('images/flutter.jpg', gaplessPlayback: true);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('テスト中です。'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Container(child: img),
              Container(
                  child: ElevatedButton(
                      child: Text("button"), onPressed: _onPressed))
            ],
          ),
        ),
      ),
    );
  }

  void _onPressed() {
    setState(() {
      if (ok == false) {
        print("false");
        ok = true;
        // 画像切り替え
        img = Image.asset('images/cat_nekoko.png', gaplessPlayback: true);
      } else {
        print("true");
        ok = false;
        // 画像切り替え
        img = Image.asset('images/flutter.jpg', gaplessPlayback: true);
      }
    });
  }
}

確認します。

( ^ω^)・・・やはりわかりません。

最後に

ただの「ボタンクリックしたら画像が切り替わるサンプル」になってしまいましたね」😅

今日はここまで!

参考

【Flutter】ボタンクリックで文字表示を行う手順ご紹介。 (ssl-lolipop.jp)

FlutterはなぜButtonを一新したのか (zenn.dev)