위 사진을 보면 알 수 있어 어떻게 child 요소들을 놓고싶냐에 따라 Column widget을 사용하든 row widget를 사용하면 된다.
Column() 생성자 함수는 const를 지원하지 않고 변수로 List<Widget>이라는 배열을 인수로 받는다.
const
하지 않다.그런데 함수역시 객체지향언어에서는 객체이다.
위 사진은 코드를 토대로 나온 결과값이다. 그런데 조금 이상하다. Center widget이 적용되지 않은 듯 하다.
하지만 이는 틀렸다. Center widget은 적용이 되었는데 Column widget이 새로라인을 전부 차지하고 있는 것이다.
즉, 가로로는 가운데 정렬이지만 새로로은 height이 100vh라서 전체를 꽉 채우고 있는 것이다.
이를 어떻게 해결할까?
스타일링을 OutlinedButton 객체가 가지고있는 styleFrom() 메서드를 이용하여 매우 쉽게 스타일링이 가능하다.
위 코드에서 foregroundColor는 textcolor를 의미한다.
RoundedRectangleBorder
로 만들면 된다.padding: EdgeInsets.all(벨류)
.class{
padding : 벨류px
}
padding: EdgeInsets.only(top: )
.class{
padding-top : 벨류px
}
또한 아래와 같이 EdgeInsets객체를 통하여 .all 이라는 속성 말고 symmetric이라는 속성으로 가로, 세로를 별도로 지정할 수 있다.
또한 fromLTRB이라는 속성값으로 각각 left, top, right, bottom값을 각기 지정할 수 있다.
height
속성을 이용해 padding 처럼 사용한다.Center 위젯으로 Column위젯을 감싼다음 Column위젯의 argument값 mainAxisSize를 min으로 설정해도 되지만
SizedBox를 이용해서 충분히 가능하다.
바로 SizedBox의 width
값을 이용하는 것이다.
하지만 width
값을 css의 100% 와 같은 기능을 하는 값이 필요한데 그것이 바로 double.infinity
이다.
class _QuestionsScreenState extends State<QuestionsScreen> {
Widget build(context) {
return SizedBox(
width: double.infinity,
child: Column(
children: [
const Text('The Question'),
const SizedBox(height: 30),
ElevatedButton(onPressed: () {}, child: const Text('Answer 1')),
ElevatedButton(onPressed: () {}, child: const Text('Answer 2')),
ElevatedButton(onPressed: () {}, child: const Text('Answer 3')),
ElevatedButton(onPressed: () {}, child: const Text('Answer 4'))
],
),
);
}
}