Row는 main축과 cross 축이 있다. Row(가로)의 main은 가로축을 의미한다. Row의 cross는 세로축을 의미한다.
Column도 main축과 cross 축이 있다. Column(세로)의 main은 세로축을 의미한다. Column의 cross는 가로축을 의미한다.
Transform.scale은 크기를 바꾸고 싶은 위젯을 child로 가진다. 부모에 어떠한 영향도 끼치지 않은 채 크기를 바꿀 수 있는 위젯이다.
offset 위젯은 아이콘을 어디에 위치 시킬건지 x축과 y축을 정해주는 위젯이다.
Container의 바깥 부분을 컨트롤하고 싶을 땐, clipBehavior: Clip.hardEdge 를 사용한다. hardEdge는 카드 부위를 넘어가는 모든 것을 잘라버리는 역할을 한다.
화면이 넘칠 때 스크롤을 이용할 수 있도록 해주는 위젯이다.
Stateful Widget은 상태를 가지고 있어서 Stateful로 불린다. 즉, 상태에 따라 변하게 될 데이터를 생각할 수 있다. 데이터가 변경될 때 우리는 이 변화는 UI에 반영하여 실시간으로 보고 싶을 것이다. 그럴 때 다음 위젯을 사용한다. 위젯에 데이터를 저장하고 싶고 실시간으로 데이터의 변화를 보고 싶으면 Stateful 위젯을 사용하면 된다. Stateful Widget은 두 개의 부분으로 나뉜다.
첫 번째 부분은 상태가 없는 위젯 그 자체이다.
두 번째 부분은 위젯의 상태로 위젯의 state는 위젯에 들어갈 데이터와 UI를 넣는 곳이다. 멋진 점은 데이터가 변경되면 해당 위젯의 UI도 변경된다는 것이다.
Stateless의 의미는 아무런 데이터를 가지고 있지 않다는 뜻이다. Stateless Widget은 build 메서드를 통해서 단지 UI를 출력할 뿐이다. 단지, 변경되지 않을 데이터가 있는 UI를 보여주기만 하면 된다.
Stateful Widget은 build 메서드외에 initState 메서드도 가지고 있다. initState는 상태를 초기화 하기 위한 메서드이다. 대부분의 경우 상태 변수를 초기화할 수 있기 때문에 initState를 사용하지 않아도 된다. 하지만 종종 부모 요소에 의존하는 데이터를 초기화해야 하는 경우가 있다. 중요한 점은 initState 메서드가 항상 build 메서드보다 먼저 호출되어야한다. 그리고 initState 메서드는 오직 단 한번만 호출된다.
그리고 super.initState()를 호출해야한다.
setState는 State클래스에게 데이터가 변경되었다고 알리는 함수이다. 우리는 setState를 사용해서 State에게 새로운 데이터가 있다고 알려줘야 한다. 그러면 State가 반응해서 뭔가를 스스로 새로고침하도록 한다. 만약 setState 함수를 호출하지 않는다면 build 메서드는 다시 실행되지 않는다. setState는 build 메서드를 한번 더 호출하는 기능을 한다.
BuildContext는 위젯 트리에서 위젯의 위치를 제공하고 이를 통해 상위 요소 데이터에 접근할 수 있다.
dispose는 위젯이 스크린에서 제거될 때 호출되는 메서드이다. API 업데이트나 이벤트 리스너로부터 구독을 취소하거나 form의 리스너로부터 벗어나고 싶을 때 사용할 수 있다.