addListener는 객체가 변경될 때 호출될 콜백함수를 등록해준다는 것이 공식에서 나오는 부분이다. (말이 어렵게 나온 거 같기도..)
initstate에서 changenotifer를 사용하는 provider에서 addListener를 이용해서 함수를 등록한다고 생각해봅시다.
그리고 끝날때엔 removeListener를 이용해서 testCallListener를 제거해줘야 남아있지 않게 된다.
initState(){
super.initState();
testProvider.addListener(testCallListener);
}
// void callback Listener make!!
void testCallListener(){
print('test listener: {test.test}');
}
void dispose() {
testProvider.removeListener(testCallListener);
super.dispose();
}
ChangeNotifierProxProvider<a,b> / 값이 바로 초기에 1번 업데이트 된다는 것이 제일 중요한게 아닌가 싶다. 예제를 통해 정리해둠
ChangeNotifierProxyProvider<TodoList, ActiveTodoCount>(
// todolist provider를 필요로 하므로 type으로 가져서 씀!
// proxyprovider는 프록시 프로바이더가 create가 되고 업데이트가 바로 호출이 되므로,
//값이 바로 업데이트 되어 기존에 initial이 0이나 []여도 문제가 없음
create: (context) => ActiveTodoCount(
initialActiveTodoCount:
context.read<TodoList>().state.todos.length),
update: (
BuildContext context,
TodoList todoList,
ActiveTodoCount? activeTodoCount,
) =>
activeTodoCount!..update(todoList),
),
copyWith : 기존 값을 변하게 하지 않고 새로운 값을 만들 때 사용! (mutation 시키지 않게 하기 위해!?)
너무 어렵게 생각하면, 아마 어려운 친구가 되지 않을까 싶다.
TodoFilterState copyWith({
Filter? filter,
}) {
return TodoFilterState(filter: filter ?? this.filter);
}
// 새로 들어온 filter가 있다면 filter를 쓰고 없다면 기존 filter를 쓴다고 생각하면 쫌 쉽지 않을까?
``