Flutter e Firestore: Como faço para obter o mais recente primeiro?
Como obtenho o mais recente primeiro do Firestore?
FirebaseFirestore.instance.collection(Strings.factsText)
.where(
Strings.category,
whereIn: [Strings.climateChange])
.orderBy('timestamp', descending: true)
.snapshots(),
...
final factsDocs = snapshot.data.documents;
return FactsListContainer(factsDocs: factsDocs);
});
O problema parece ser .where
ao usar com .orderBy
!
Respostas
Se você tiver um createdAt
campo com um carimbo de data / hora ou um valor sempre crescente, poderá obter os instantâneos em ordem decrescente desse campo com:
stream: FirebaseFirestore.instance
.collection(Strings.factsText)
.orderBy('timestamp', descending: true)
.where(
Strings.category,
whereIn: [Strings.climateChange])
.snapshots(),
Consulte também a documentação do FlutterFire sobre o Query.orderBymétodo .
Eu finalmente resolvi isso criando um índice no Firebase console e funcionou perfeitamente, então agora estou obtendo o mais recente primeiro.
Em meu banco de dados, fui para Índices para criar um novo índice, adicionei o nome da minha coleção e, para os campos, adicionei 'categoria' - decrescente e 'carimbo de data / hora' - decrescente, cliquei em Coleção e em Criar índice.