「レイアウトを上手く調整したい!」
本記事ではそんな要望にお答えします。
レイアウトの隙間を埋めて上手く調整するのに有用なウィジェットである、Spacer
ウィジェットについて解説します。
基本的な使い方から、調整方法まで詳しく解説します。
ぜひ読んでみてください!
基本的な使い方
Column
やRow
にSpacer
ウィジェットを配置することで、
子と画面の隙間を埋めるようにスペースが設定されます。
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
const Spacer(),
Container(
width: 200,
height: 200,
color: Colors.red,
),
],
),
),
);
}
}
Row
でも同様に子と画面の差分の隙間をSpacer
が埋めます。
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Row(
children: [
const Spacer(),
Container(
width: 200,
height: 200,
color: Colors.red,
),
],
),
),
);
}
}
Spacerを2つ配置すると、1つのSpacer
の大きさは、
子と画面の間の隙間を2等分した大きさになります。
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Row(
children: [
const Spacer(),
const Spacer(),
Container(
width: 200,
height: 200,
color: Colors.red,
),
],
),
),
);
}
}
これを利用することで、この両端に同じ大きさのスペースをSpacer
で設定することができます。
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Row(
children: [
const Spacer(),
Container(
width: 200,
height: 200,
color: Colors.red,
),
const Spacer(),
],
),
),
);
}
}
基本的な使い方は以上となります!
調整方法
flex
プロパティにて数値を設定することで、Spacer
を含むExpanded
されたウィジェットがRow
(Column
)の中に複数ある際に、
どれだけの大きさをSpacer
が占有するかを設定することができます。
以下は、2つあるSpacer
の片方にflex : 2
を設定した例です。
何も設定しない場合 flex : 1
のため、
結果として隙間を1:2に分けていることがわかります。
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Row(
children: [
const Spacer(),
Container(
width: 200,
height: 200,
color: Colors.red,
),
const Spacer(
flex: 2,
),
],
),
),
);
}
}
調整方法は以上となります!
まとめ
本記事では、レイアウトの隙間を埋めて上手く調整するのに有用なウィジェットである、Spacer
ウィジェットについて解説しました。
基本的な使い方から、調整方法まで詳しく解説しました。
いかがだったでしょうか?
画面の隙間を数値で設定するのでなく、隙間の大きさに応じて設定したい、
という時に有用なウィジェットかと思います。
ぜひ利用して、自由自在にレイアウトを作成してみてください!
本記事があなたのアプリ開発の一助となれば幸いです。
編集後記(2022/11/18)
Spacer
ウィジェットについての解説記事でした。
隙間を設定するのにSpacer
ウィジェットを使うのか、SizedBox
ウィジェットを使うのか、
はたまたRow
やColumn
のalignment
プロパティを使うのかは、
かなり悩ましいところかと思います。
結局の所、一般的にこうすればいい、というものはなくて、
何が決まっているのかに応じて判定すべきです。
例えば隙間の大きさが決まっているときは、SizedBox
ウィジェットを使って設定するのが良いです。
逆に子の大きさが決まっていて、隙間はよしなに設定してくれ、というのであれば、alignment
プロパティを使うのが良いと思います。
この大きさが決まっていて、隙間の大きさが一律でないときは、Spacer
のflex
で調整するのが良いでしょう。
要件に応じた選択が必要、ということですね。
一つを覚えるのでなくどんな要件が来ても対応できるようにしておくのが良さそうです。
ぜひ使いこなしてみてください!
週刊Flutter大学では、Flutterに関する技術記事、Flutter大学についての紹介記事を投稿していきます。
記事の更新情報はFlutter大学Twitterにて告知します。
ぜひぜひフォローをお願いいたします。