728x90
문제 :
파이어베이스에 저장된 DB로부터 데이터를 가져오는데
orderBy에 대한 조건을 2개 쓰고 싶었다.
일단 bool값을 우선으로 해서 false인 것을 상단에 위치시키고
그 안에서 날짜 순으로 배열하고 싶었다.
파이어베이스의 인스턴스로부터 가져오는 stream에 orderBy 조건을 두개 넣어보았다.
stream: Firestore.instance
.collection('todo')
.orderBy('isDone')
.orderBy("expired")
내가 원하는 순서로 정렬은 됐는데, 변경된 데이터 값이 바로 화면에 적용되지 않았다.
검색해보니 orderBy를 여러개 쓰거나 where문을 같이 쓸 경우 충돌이 난다고 한다...
stream에서 bool을 기준으로 orderBy를 하고 밑에서 compareTo()를 통해 날짜로 정렬했더니
마지막에 정렬한 날짜 기준으로만 데이터가 정렬되었다. 반대도 마찬가지였다.
과정 :
결국 sort안에서 compareTo()로 2개의 데이터 비교 부분을 만드는 것이 답이라고 생각했다.
isDone이 false인 항목은 오름차순, true인 항목은 내림차순으로 표시되는 듯 했으나..
한참 뒤에 아니라는 것을 깨달았다..
orderBy와 where문을 여러개 사용할 수 없는 건 너무 귀찮아지는 일인 것 같은데..
최종 결과 :
결국 여기에 이렇게까지 시간을 쏟고싶지 않았고 ux적인 요소 등등 여러가지를 고려해서
사용 / 미사용 목록을 탭으로 나누어 표시했다.
'Flutter' 카테고리의 다른 글
Flutter - 사진 업로드 비동기 처리 (0) | 2021.02.13 |
---|---|
Flutter - StreamBuilder 데이터 변경시 화면 다시 그리기 (0) | 2021.02.09 |