flutter

provider listview builder에 적용시 문제점

햎피 2022. 6. 15. 23:47
반응형

list view builder에 provider를 적용하였다.

그런데 데이터를 추가했을 때 데이터가 바로 업데이트 되지 않았다...

아래가 문제가되는 화면이다..

 

stackoverflow에서 찾은 방법인데,,

 

1번방법

이 방법은 stateful widget에서 initstate를 사용했다. 그런데 우리는 stateless widget을 사용하기 때문에 initstate가 없어서 이 방법으로는 해결 할 수 없다,,

https://stackoverflow.com/questions/62994906/is-there-other-method-to-update-data-in-custom-listview-in-provider-flutter

 

Is there other method to update data in custom listview in provider Flutter

I am fetching data from firebase and show in listview. I store data in list and and then notify it but still list length is null. I study all related question but still not get solution. i want whe...

stackoverflow.com

 

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을 유지하면서 가능하다고 말했다.

https://stackoverflow.com/questions/62865729/how-can-i-update-the-list-after-changing-an-item-status-flutter-and-provider

 

How can I update the list after changing an Item status? (Flutter and Provider)

I have this problem: I have a list of Items, each with a favorite status, and I have a page that shows the favorite items. I want the page to update and remove the non-favorite items when I toggle ...

stackoverflow.com

 

세번째,

나랑 비슷한 현상인 것 같은데, 이사람은 context.select를 이용해서 해결했다.

https://stackoverflow.com/questions/69528483/unable-to-update-new-data-in-listview-flutter

 

Unable to update new data in Listview Flutter

Hey guys I am new to flutter, I have been trying to build a mock app that shows a feed it works fine using the mock data, but when I try to add new input data it gets added but doesn't get updated,

stackoverflow.com

https://stackoverflow.com/questions/65210441/how-to-update-ui-when-remove-and-add-list-item-with-provider

 

How to update UI when remove and add list item with provider

I have a list items in provider model, and i want to set a observer listener to it when i add or remove item, while update part of related UI in the stateless widget (not with setState in Stateful ...

stackoverflow.com

 

 

flutter 코딩을 하다보니, 점점 flutter의 구조에 대해서 더 깊숙하게 알아야할 것 같다.

그리고 provider에도 select, read, watch 등  다양한 메소드들이 있다.

잠시 알아보자면

watch : change notifier class 데이터의 변화를 감지해 데이터를 얻고, 위젯 rebuild

read :  change notifier class 데이터를 읽고 사용, 데이터에 접근 가능하지만 위젯 rebuild 하지 않음

select : change notifier class 데이터의 변화를 감지해 데이터를 얻고, 위젯 rebuild (select된 속성의 변화만)

반응형