ValueNotifier
단일 값(single value) 변경 알림 class 로 value 가 == 연산자로 계산되며,
이전 value 값과 같이 않을경우 리스너에 알린다. 이러한 사항 때문에 value 가
변경 가능한 데이터 타입일 경우 리스너에 알리지 않는다.
때문에 만약 데이터 타입이 변경될 수 있을 경우 ChangeNotifier 를 사용하는것이 좋다.
ValueListenableBuilder
ValueListenable 가 리스너로 등록되어, 값이 변경 될때마다 업데이트 된 값으로 builder 를 호출하는 위젯이다.
이제 위의 ValueNotifier, ValueListenableBuilder 를 이용하여
변경 되지 않는 데이터 타입이며, 단일 값으로 간단한 상태 관리가 필요한 경우 사용하기 좋다.
아래는 위의 예제와 같이 이해를 위해 간단하게 작성한 코드이다.
예제 코드는 링크를 참고바란다.
// ValueNotifier
final ValueNotifier<int> testValue = ValueNotifier<int>(0);
// testValue Change
testValueChange() => testValue.value = testValue.value+1;
Widget build(BuildContext context) {
return
...
TextButton(
// testValue 값 변경.
onPressed: testValueChange,
child: Text('ValueNotifier Increase'
),
...
ValueListenableBuilder(
// testValue 를 리스너로 등록
valueListenable: testValue,
// testValue 가 변경될때마다 build 함수 실행.
builder: (BuildContext context, value, Widget? child) {
return Text(
'ValueListenableBuilder ValueNotifier : $value',
style: Theme.of(context).textTheme.bodyMedium,
);
},
),
}