ChangeNotifier
상태관리에 주로 사용되며, ValueNotifier 의 상위 호환 class 라고 이해하면 된다.
ChangeNotifier 는 notifyListeners() 메서드를 호출하여 상태가 변경되었음을 알린다.
또한 하나의 상태를 관리하는것이 아닌, 여러 상태를 관리할 수 있다.
ListenableBuilder
Listenable 가 리스너로 등록되어, 값이 변경 될때마다 업데이트 된 값으로 builder 를 호출하는 위젯이다.
ValueListenableBuilder 와 비슷하지만 리스너로 사용하는 인터페이스가 다르다.
작고, 복잡하지 않은 상태관리를 할 경우 ValueNotifier 와 ValueListenableBuilder 를 이용했다면,
그 반대로 크고 복잡할 경우 ChangeNotifier 와 ListenableBuilder 를 이용하여 상태 관리를 할 수 있다.
위의 예제와 같이 간단하게 구현한 코드이다.
아래는 간략하게 ChangeNotifier 를 사용하는 방법이다.
// ChangeNotifier 구현
class ChangeNotifierTest with ChangeNotifier {
double _testValue = 0;
double get testValue => _testValue;
randomChange() {
_testValue = (Random().nextDouble());
// 변경되었음을 알림.
notifyListeners();
}
}
Widget build(BuildContext context) {
final ChangeNotifierTest test = ChangeNotifierTest();
return
...
ListenableBuilder(
listenable: test,
builder: (BuildContext context, Widget? child) {
// 알림을 수신하면 re-build.
return Text('Current TestValue : ${test.testValue}');
},
),
...
}