이번 팀프로젝트는 StatefulWidget으로 상태 관리가 진행되었다.
최상단 Widget인 HomePage에 상태를 두고 관리하려니 불편함이 이만저만이 아니었다..

StatefulWidget은 상태를 가질 수 있는 Widget이다.
주로 최상단 Widget에 상태 및 변환 로직을 저장하고 사용한다.
자식 위젯은 부모 위젯의 상태를 내려받아서 사용해야 한다.
StatefulWidget을 생성하면 StatefuleWidget을 상속받는 class와 State를 상속받는 class로 이루어져있다.
여기서 State는 createState()로 인해 생성되며, State와 Widget Tree에 엮어 위치하게 된다.
전에도 학습한 적이 있지만, Widget은 불변하기에 화면을 다시 그리려면 파괴한 뒤 다시 그려야 한다.
State에는 Widget이 파괴되어도 사라지지 않고 메모리에 유지되는 정보를 담고 있다.
생성자나 파라미터로 데이터를 전달하게 되면 값에 의한 참조나 주소에 의한 참조로 나뉜다.
"Call by value"는 단순히 데이터가 품고 있는 value만 복사해 넘어가는 것이고, 원본과는 전혀 상관이 없다.
Dart에서는 모든것이 객체이기 때문에 새로운 객체를 만들어 새로운 주소를 가리키게 만든다.
기본 타입(int, double 등)이 이에 속한다.
"Call by refernce"는 데이터의 주소값을 넘기며, 이때는 원본을 직접 변경할 수 있는 리모컨이 있는 셈이다.
Iterable 객체(Set, Map, List, Custom class)는 Widget Tree 내에서 전달 될 때 최상위 위젯의 값을 변경시킬 수 있다.

Callback 함수는 "나중에 이벤트가 발생하면 실행할 일"을 담고있는 함수이다.
Dart에는 Callback 전용 함수들이 존재한다.
상위 위젯으로부터 함수를 전달받아 상위 위젯의 상태를 변경해줘야 하기 때문에 StatefulWidget에서는 꼭 필요한 부분이다.
대표적으로 사용되는 콜백함수로는 VoidCallback이 있다.
void Funcion()를 담고있으며, 파라미터 없이 단순히 상위 위젯의 상태를 변경할 때 사용된다.
Callback 함수를 바라보면 참 특이하다는 생각만 든다.
컴퓨터는 어떻게 Callback 함수를 처리할까?
핵심은 함수를 데이터처럼 취급하는 것이다.
데이터를 인터넷에서 받아오는 동안 앱에 렉이 생기거나 멈추면 안된다.
데이터가 도착할 때까지 다른 일을 할 수 있도록 Callback을 사용한다.
팀 프로젝트에서 겪은 경우를 말한다.
자식에게서 이벤트가 발생하면 부모의 상태가 변경되게끔 하는 부분이다.