본문 바로가기

Flutter

Flutter - Firestore orderBy 조건 여러개 설정하기

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적인 요소 등등 여러가지를 고려해서

사용 / 미사용 목록을 탭으로 나누어 표시했다.