Flutter를 접해보신 분들이라면, 이제 StatelessWidget / StatefulWidget은 낯선 객체가 아니실겁니다.

그럼 StatefulWidget을 조금만 더 깊게 써보셨다면, dart 파일을 분리 해서 import 해서 사용하시는 경우 부모와 자식 객체 간의 상태관리를 해보신다면 어떻게 하실까요?

대표적인 방법으로는 일급 함수를 사용하는 방법이 가장 바람직하고, 저는 개인적으로 창피한 이야기이지만, 그냥 노지(?) 클래스에 감싸지지 않은 함수를 선언해서 언제 어디서든 호출하게 만들었으나 효율상으로나 보안상으로아 안정성에 있어서 절대 추천 드리지 않습니다.

일급 함수로 각각의 객체에 대해 변수를 선언하고 해당 state를 관리하다보면 어느 setState 함수가 어느 객체와 맞닿아있는지 잃어버리기 십상입니다.

그런걸 방지하기 위해 개발자들은 상태를 관리할 수 있는 도구를 만들어내기 시작했고, 대표적이라고 할만한 몇몇 상태도구들이 두각을 보이기 시작했습니다.

Bloc

https://pub.dev/packages/bloc

bloc는 상태관리 모델의 원조격(?)으로 UI와 Bussiness Logic을 분리, 관리하여 상호간의 의존성을 줄인 것이 특징입니다.

다만 Stream을 핸들링해야 하고, RxDart에 대한 이론도 필요하기 때문에, 난이도가 다소 높은 편입니다.

Provider

https://pub.dev/packages/provider

가장 대중적인 라이브러리 중 하나입니다. Provider는 위젯트리의 최상단에 위치하여 프로젝트 전역을 관리하게 되면서, MultiProvider를 통해 다중 상태관리에 특화 된 라이브러리입니다.

사용에 가장 무난하고, 안정성이 높은 것이 특징이며, 파생된 라이브러리로 Riverpod 등이 있습니다.

GetX

https://pub.dev/packages/get

이번에 소개하는 상태 관리 모델 중 가장 많은 Likes를 가진 상태관리 모델입니다.

사실 GetX는 상태관리 모델 그 이상의 라이브러리입니다. Flutter의 기본 정의이지만 사용하기 굉장히 껄끄러운 BuildContext와 State 없이 http 통신부터 Navigator, toast / dialog message 등 여러 유틸리티가 포함된 다재다능한 라이브러리입니다.

각각의 Tutorial은 각기 pub.dev 페이지를 참조하시기 바랍니다. (언젠가는 만들어서 추가 할 예정)