👻
FlutterでWidgetを隠したり表示したりをコントロールする
Webだと display: none
を使って要素を条件に応じて隠したりしますが、Flutterで同じことをするにはどうすればいいのかを調べたメモ。
環境
- macOS Big Sur Version 11.3.1
- Flutter 2.2.0
- Dart 2.13.0
Widgetの可視性をコントロールする
Visibility
ウィジェットを使う。visible
というプロパティがあり、boolを値として設定します。
true
-> 表示
false
-> 非表示
サンプルコード
簡単なサンプルコードを書いてみた。やってることはボタンを押すとテキストの表示/非表示が切り替わる簡単なものです。
import 'dart:math';
import 'package:flutter/material.dart';
class VisibilitySample extends StatefulWidget {
const VisibilitySample({Key? key}) : super(key: key);
_VisibilitySampleState createState() => _VisibilitySampleState();
}
class _VisibilitySampleState extends State<VisibilitySample> {
bool isVisible = false;
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Visibility(
visible: isVisible,
child: const Text('Visibilityテスト'),
),
TextButton(
onPressed: () {
setState(toggleShowText);
},
style: TextButton.styleFrom(
backgroundColor: Colors.white
),
child: Text('クリックミー'),
),
],
),
),
),
);
}
void toggleShowText(){
isVisible = !isVisible;
}
}
コードの解説
表示の状態を保持するためにisVisibility
として変数定義しておきます。(デフォルトはfalseで非表示)
bool isVisible = false;
さらに条件に応じて表示の切り替えたいウィジェットをVisibility
で囲う。ここではText
を囲っています。
Visibility(
visible: isVisible, // デフォルトはfalseなので非表示になる
child: const Text('Visibilityテスト'),
),
TextButton
を用意し、押したときにトグルで表示/非表示を切り替えるようにします。
TextButton(
onPressed: () {
setState(toggleShowText);
},
style: TextButton.styleFrom(
backgroundColor: Colors.white
),
child: Text('クリックミー'),
),
~省略~
void toggleShowText(){
isVisible = !isVisible;
}
実際に動作させてみた動画がこちら。
Discussion