이 글은 StateNotiffier에 대해 알아가기 위해 공부한 내용을 적은 글 입니다.
StateNotifier를 알아보기전에 State란 무엇인지 알아보겠습니다.
What is state?
Flutter는 본질적으로 선언형 프로그래밍 입니다.
이 말은 Flutter가 UI를 구축하기 위해서는 build 메서드를 오버라이드하여 앱의 현재 상태를 반영한다는 것을 의미합니다.
Flutter 공식문서에 따르면 state란 "언제든지 UI를 다시 빌드하기 위해 필요한 모든 데이터" 라고 정의 하고 있습니다.
그리고 state는 ephemeral state 와 app state 2가지 유형이 있습니다.
ephemeral state vs app state
ephemeral state
하나의 위젯에 포함될 수 있는 state를 ephemeral state 라고 합니다.
Flutter는 state를 처리하기 위해 StatefulWidget, setState 를 제공합니다.
ephemeral state의 예로 Flutter 프로젝트를 처음 생성하면 나오는 Counter 앱을 예로 들 수 있습니다.
app state
서로 다른 위젯 간에 공유하는 state를 app state 라고 합니다.
ChangeNotifier and ValueNotifier
ChangeNotifier 는 리스너에게 변경됐음을 알려주는 클래스입니다.
ChangeNotifier 클래스를 구독하고 해당 클래스에 변경 사항이 있을 때 notifyListeners() 메서드를 호출해 해당 클래스를 구독하고 있는 위젯을 rebuild 합니다.
ValueNotifier 는 단일값을 전달하는 ChangeNotifer 이며 해당 단일값이 변경되면 리스너에게 알립니다. 앱의 상태 관리로 적당하지만 모든 경우에서 사용하기에는 적절하지 않습니다. 이런 경우에 도움이 되는StateNotifier가 있습니다.
StateNotifier
일반적인 Flutter 앱에서는 ChangeNotifier를 사용해도 문제가 발생하지 않습니다. 하지만 ChangeNotifier는 state를 직접 변경이 가능합니다.
반면에 StateNotifier 는 notifier안에서만 상태를 변경할 수 있는 불변 상태 관리 솔루션 입니다.
그리고 Flutter에 의존하지 않는 독립적인 패키지 입니다.
StateNotifier의 장점
- old state와 new state를 비교하기 좋다.
- notifier안에서만 상태를 변경할 수 있기 때문에 디버깅이 쉬워진다.
- 리스너가 자동으로 활성화 된다.
따라서 ChangeNotifier를 사용하지 말고 StateNotifier를 사용해라.
그리고 이 패키지를 만든 사람은 Provider 또는 Riverpod을 사용할 때 해당 StateNotifier를 사용하길 권장하고 있습니다.
다음 글에서 Riverpod에서 StateNotifier를 사용하는 것을 다루겠습니다.
참고사이트
https://blog.logrocket.com/statenotifier-improving-state-change-notifiers-flutter/
'Flutter > 기본' 카테고리의 다른 글
[Flutter] Key 란 무엇인가? (0) | 2023.02.09 |
---|---|
[Flutter] Widget Tree / Tree 란 무엇인가? (0) | 2023.02.09 |
[Flutter] .g.dart 파일 정리하기. (0) | 2023.01.25 |
[Flutter] json_serializable 사용하기 (0) | 2023.01.24 |
[Flutter] flutter_secure_storage 사용하기 (0) | 2023.01.23 |