티스토리 뷰

Dart & Flutter/Widget & Package

Getx 정리

낭초비 2022. 4. 1. 22:01
반응형

Getx 그 중에서도 Obs, Obx 사용법에 대해서 정리

 

참고자료: Getx의 statemanagement 에 대한 문서

https://github.com/jonataslaw/getx/blob/master/documentation/en_US/state_management.md

 

GitHub - jonataslaw/getx: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies eas

Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get. - GitHub - jonataslaw/getx: Open screens/snackbars/dialogs/bottomSheets without c...

github.com

 

the improper use of a GetX has been detected.

이 에러 메세지 해결하느라 3일을 소모했다.....

분명히 GetXController에 있는 RxList<T> 타입의 변수 내에 값은 변경이 되는데, Obx로 감싸준 widget의 내용은 왜 바뀌지 않는지 이유를 몰라 그걸 찾느라 시간이 많이 소모 되었다. 

 

RxList<T> 형태의 경우, List에 새로운 값을 입력하여 값이 변화가 생길 경우, refresh() 를 호출해서 RxList 값이 갱신되었다는 것을 알려줘야 했다.   

 

RxList가 아닌 RxInt나 RxString은 그냥 value 가 변경되면 자동으로 인지하고 해당 value를 refer하는 widget을 update하 였다 (그  widget이 Obx로 감싸져 있을 경우). 

 

 

그리고 initialize할 때 선언한 obs 변수에 대해서 값을 갱신할 때는, 새로운 obs 변수를 선언해서 대입해서는 안된다. 그러면 기존의 obs를 선언한 변수가 변화했다고 인지하지 않고, 새로운 obs변수가 선언되었다고 인식하는 것 같다.  (그래서 리스트의 경우 변수 대입 후 .refresh()를 호출해도 반응이 없었다.) 

 

아래는 내가 실수한 예시이다. 

obs 변수 선언
초기화 함수 내에서 변수 초기화
변수 내용을 update하는 함수 내에서 기존의 obs변수에 새로운 obs 변수를 생성하여 다시 입력하는 실수를 하고있다

RxList 타입의 obs 변수를 선언하고 초기화하였다면 이후에는 그 변수의 내부 값을 변경해야지, 위의 코드처럼 새로운 obs변수를 생성해서 입력하면 안된다. 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함