MainAxisAlignment (주축)
위젯을 채우고 남는 공간을 모두 차지한다.
import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( bottom: false, child: Container( color: Colors.black, child: Column( // Row() 는 가로 // MainAxisAlignment - 주축 정렬 // start - 시작 // end - 끝 // center - 가운데 // spaceBetween - 위젯과 위젯 사이 동일 배치 // spaceEvenly - 위젯을 같은 간격으로 배치하지만, 끝과 끝에도 빈 간격으로 시작 // spaceAround - spaceEvenly + 끝과 끝 간격 1/2 mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( color: Colors.red, width: 50.0, height: 50.0, ), Container( color: Colors.orange, width: 50.0, height: 50.0, ), Container( color: Colors.yellow, width: 50.0, height: 50.0, ), Container( color: Colors.green, width: 50.0, height: 50.0, ), ], ), ), ), ); } }
CrossAxisAlignment (반대축)
위젯 넓이의 합 만큼만 차지한다. (주축과 반대)
import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( bottom: false, child: Container( color: Colors.black, width: MediaQuery.of(context).size.width, child: Row( // crossAxisAlignment - 반대축 정렬 // start - 시작 // end - 끝 // center - 가운데 // stretch - 최대한으로 늘림 mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container( color: Colors.red, width: 50.0, height: 50.0, ), Container( color: Colors.orange, width: 50.0, height: 50.0, ), Container( color: Colors.yellow, width: 50.0, height: 50.0, ), Container( color: Colors.green, width: 50.0, height: 50.0, ), ], ), ), ), ); } }
mainAxisSize
주축 mainAxis 의 사이즈를 설정할 수 있다.
// MainAxisSize - 주축 크기 // max - 최대 // min - 최소 mainAxisSize: MainAxisSize.min,
Expanded / Flexible
Row나 Column의 children[] 에만 사용할 수 있다.
Expanded : 남아있는 공간을 차지함
Flexible : 남은 공간을 버림
Expanded 는 자주 사용되므로, 꼭 기억하자
복합
import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, body: SafeArea( bottom: false, child: Container( color: Colors.black, child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ Container( color: Colors.red, width: 50.0, height: 50.0, ), Container( color: Colors.orange, width: 50.0, height: 50.0, ), Container( color: Colors.yellow, width: 50.0, height: 50.0, ), Container( color: Colors.green, width: 50.0, height: 50.0, ), ], ), Container( color: Colors.orange, width: 50.0, height: 50.0, ), Row( mainAxisAlignment: MainAxisAlignment.end, // crossAxisAlignment: CrossAxisAlignment.end, // mainAxisSize: MainAxisSize.max, children: [ Container( color: Colors.red, width: 50.0, height: 50.0, ), Container( color: Colors.orange, width: 50.0, height: 50.0, ), Container( color: Colors.yellow, width: 50.0, height: 50.0, ), Container( color: Colors.green, width: 50.0, height: 50.0, ), ], ), Container( color: Colors.green, width: 50.0, height: 50.0, ), ], ), ), ), ); } }
이렇게 Row 와 Column 을 부모 자식 관계로도 사용할 수 있다.