RowやColumnで要素を並べる際に、要素同士の間隔を指定するのに苦労しました。
RowやColumnにはchildrenの間隔を制御するmainAxisAlignmentプロパティが用意されていますが、こちらは均等な間隔しか指定できません。
Spacer
を使えば複雑なレイアウトも簡単に作ることができるようです。
備忘録も兼ねて残しておきます。
まずはただContainerを三つ並べてみます。
(どこまでがRowなのかわかりやすくするためにRowをContainerで囲って色をつけています)
Row(
children: [
colorSquare(Colors.green),
colorSquare(Colors.yellow),
colorSquare(Colors.pink),
],
),
Widgetの間にSpacer
を追加してみましょう。
Row(
children: [
colorSquare(Colors.green),
Spacer(),
colorSquare(Colors.yellow),
Spacer(),
colorSquare(Colors.pink),
],
),
スペースが確保されました!
flex
を設定してみましょう。デフォルトでは1
になっています。
Row(
children: [
colorSquare(Colors.green),
Spacer(flex: 2),
colorSquare(Colors.yellow),
Spacer(flex: 1),
colorSquare(Colors.pink),
],
),
スペースが2:1
になりました。
SizedBox
と組み合わせることで自由自在にレイアウトできます。
Row(
children: [
colorSquare(Colors.green),
Spacer(flex: 2),
colorSquare(Colors.yellow),
Spacer(flex: 1),
colorSquare(Colors.pink),
SizedBox(width: 20),
colorSquare(Colors.cyan),
],
),
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: SpacerSamplePage(),
);
}
}
class SpacerSamplePage extends StatefulWidget {
_SpacerSamplePage createState() => _SpacerSamplePage();
}
class _SpacerSamplePage extends State<SpacerSamplePage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('spacerの使い方'),
),
body: Center(
child: Container(
color: Colors.grey,
child: Row(
children: [
colorSquare(Colors.green),
Spacer(flex: 2),
colorSquare(Colors.yellow),
Spacer(flex: 1),
colorSquare(Colors.pink),
SizedBox(width: 20),
colorSquare(Colors.cyan),
],
),
),
),
);
}
Widget colorSquare(Color color) {
return Container(
width: 50,
height: 50,
decoration: BoxDecoration(
color: color,
border: Border.all(),
),
);
}
}
Spacer
を知らなかったときはRowの中にさらにRowを入れたりして気合いでUIを作っていました。
知っていれば簡単にできるのに、知らないで苦労することって多いなあと思いました。
誰かのお役に立てば幸いです。
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More