list view builder에 provider를 적용하였다.
그런데 데이터를 추가했을 때 데이터가 바로 업데이트 되지 않았다...
아래가 문제가되는 화면이다..
stackoverflow에서 찾은 방법인데,,
1번방법
이 방법은 stateful widget에서 initstate를 사용했다. 그런데 우리는 stateless widget을 사용하기 때문에 initstate가 없어서 이 방법으로는 해결 할 수 없다,,
2번방법
이 사람도 item을 하나 추가/삭제 될 때마다 페이지가 업데이트되는것을 바랐다.
(자세하게 말하자면, item이 있고, 각 item 마다 상태가 두가지 favorite/non-favorite 있는데, 해당 아이템의 상태를 favorite으로 토글하면, listviewbuilder 안에 item이 추가되고, non-favorite 상태로 토글하면, listviewbuilder안에 item이 삭제되기를 바람)
ChangeNotifierProxyProvider를 사용했는데 해결하지 못했다고 한다. 답변에서는
'Provider는 데이터를 위젯 트리에서 위에서 아래로 (parent에서 children으로) propagate하는 것으로 작동한다.
하지만, Item(child)이 변화할 때마다 parent에게 notify하기를 바라는 것은,
parent, children 둘다 codependent하게 만드는 것이다.
그리고 이것은 스파게티 코드를 만들것이다!' 라고 말하고 있다.
그러면서 해결책으로 제시한 것이, favorite 상태부분에서의 모든 변화가 list를 업데이트하게 만들면, parent, children 에서의 logic을 유지하면서 가능하다고 말했다.
세번째,
나랑 비슷한 현상인 것 같은데, 이사람은 context.select를 이용해서 해결했다.
https://stackoverflow.com/questions/69528483/unable-to-update-new-data-in-listview-flutter
flutter 코딩을 하다보니, 점점 flutter의 구조에 대해서 더 깊숙하게 알아야할 것 같다.
그리고 provider에도 select, read, watch 등 다양한 메소드들이 있다.
잠시 알아보자면
watch : change notifier class 데이터의 변화를 감지해 데이터를 얻고, 위젯 rebuild
read : change notifier class 데이터를 읽고 사용, 데이터에 접근 가능하지만 위젯 rebuild 하지 않음
select : change notifier class 데이터의 변화를 감지해 데이터를 얻고, 위젯 rebuild (select된 속성의 변화만)
'flutter' 카테고리의 다른 글
flutter bottom overflowed by pixels (0) | 2022.06.18 |
---|---|
flutter background color 설정하기 (0) | 2022.06.17 |
flutter quill editor provider 적용/ 저장했던 글 불러오기 (0) | 2022.06.14 |
table calendar flutter provider (1) | 2022.06.07 |
emulator에서 앱 삭제하기 (0) | 2022.06.04 |