[Flutter] ValueNotifier 간단하게 알아보자

Tykan·2021년 10월 25일
0
post-thumbnail

ValueNotifier?

일단 Flutter 공식 문서부터 살펴보자.

A ChangeNotifier that holds a single value.

When value is replaced with something that is not equal to the old value as evaluated by the equality operator ==, this class notifies its listeners.

ValueNotifer는 ChangeNotifer를 상속받는 클래스다.

특별한 점은 단 하나! single value에 특화되어있다.
그래서 해당 new.value가 old.value와 다를 경우 리스너에게 알려준다.

ChangeNotifier는 리스너를 별도로 호출해야 한다.

그럼 언제 쓸까?

먼저, Flutter에서 흔히 접할 수 있는 ValueNotifier는 뭘까?
바로 TextEditingController!!

"왜 TextEditingController를 사용해서 Textfield의 상태를 관리할까?"라고 생각해보면, 언제 ValueNotifier를 써야하는지 알 수 있다.

TextField 위젯이 어디에 있든, 우리는 상위, 하위 어디서든 컨트롤러를 통해 해당 텍스트 값에 접근하고 리스너를 등록하고 싶다.

결국 상태 관리의 하나의 방식이다.

다음과 같은 상황에 ValueNotifier 사용을 고려한다(지극히 개인적..)

  1. 여러 위젯에서 접근하기 때문에 setState 사용이 어렵다.
  2. Provider와 GetX 같은 상태관리 툴을 무분별하게 사용하고 싶지 않다.
  3. 오직 한 클래스의 변화에만 관심이 있다.

Provider, GetX를 써도 아무 문제없다.

개인적으로 앱 서비스 구조와 연관된 큰 부분만 툴을 사용하고, 단순한 ViewModel-View 구조의 위젯이 반복 재사용될 때에는 굳이 써드파티 패키지를 사용하지 않고 구분하는 것을 선호한다.

사용법

class MyController extends ValueNotifier<int> {
  MyController() : super(0);

  void increment(){
    value++;
    // value를 set할 경우에는 notifyListeners();를 자동으로 해준다.
  }
}

void main() {
  final _controller = MyController();
  
  print(_contoller.value); // 0
  _controller.increment();
  print(_controller.value); // 1
}
profile
개발자 Theo :: 고민은 성장의 힘

0개의 댓글