Implementación de búsqueda con Firebase firestore | Flutter

Eduardo CQ
Dec 5, 2019 · 3 min read

Fuente: Implement searching with Firebase firestore | Flutter
Autor: Ashish Rawat

Hola a todos, en este artículo voy a mostrarte como buscar un documento en una colección.

¿Cuál es la necesidad?

Supongamos que tienes una lista de documentos dentro de una colección y quieres buscar en la lista de documentos con respecto a caseNumber.

¿Qué es lo que tengo?

Query where(
String field, {
dynamic isequalto,
dynamic isLessThan,
dynamic isGreaterThanOrEqualTo,
dynamic isGreaterThan,
dynamic isGreaterThanOrEqualTo,
dynamic arrayContains,
bool isNull,
}
){
}

¿Debo usar isEqualTo?

List<DocumentSnapshot> documentList;
documentList = (await Firestore.instance
.collection("cases")
.document(await firestoreProvider.getUid())
.collection(caseCategory)
.where("caseNumber", isEqualTo: query)
.getDouments())
.documents;

Si usas isEqual , entonces tendrás que escribir toda la consulta, en mi caso, tendré que escribir todo el caseNumber para mostrar el resultado de busqueda.

¿O isGreaterThanOrEqualTo?

El complemento de Flutter firestore también permite buscar datos particulares en el documento.

documentList = (await Firestore.instance
.collection("cases")
.document(await firestoreProvider.getUid())
.collection(caseCategory)
.where("caseNumber", isGreaterThanOrEqualTo: query)
.getDouments())
.documents;

Pero no estarás satisfecho con el resultado.

¿Qué es lo que verdaderamente quieres?

Incluso si escribes un alfabeto único para la consulta de búsqueda, deberías conseguir el resultado más apropiado de firestore.

¿Qué debes hacer?

Necesitarás agregar la lista de opciones de consulta que un usuario buscará.

Por ejemplo

Para caseNumber (1011222), el usuario puede buscar

[1, 10, 1011, 10112, 101122, 1011222]

En el momento que estás insertando datos en firestore, lo que puedes hacer es crear las opciones de consulta de búsqueda.

{
"caseSearch" : setSearchParam(caseNumber),
}

Para agregar la lista de opciones de consulta

setSearchParam(String caseNumber) {
List<String> caseSearchList = List();
String temp = "";
for(int i = 0; i < caseNumber.length; i++){
temp = temp + caseNumber[i];
caseSearchList.add(temp);
}
return caseSearchList;
}

Esto dará como resultado la inserción de todas las consultas que un usuario puede buscar.

Implementar

En el TextField, cuándo el valor del texto está cambiando, se consulta en la base de datos

onChanged: (String query) {
getCasesDetailList(query);
}

Ahora que tienes el arrayContains en la consulta, todo lo que necesitas hacer es verificar el valor del texto que está siendo escrito y su consulta firebase automaticamente buscará todos los documentos que tienen el caseSearch, un array que contiene la consulta.

List<DocumentSnapshot> documentList = (await Firestore.instance
.collection("cases")
.document(await firestoreProvider.getUid())
.collection(caseCategory)
.where("caseNumber", arrayContains: query)
.getDocuments())
.documents;

Ahora obtendrás toda la lista de documentos que coincidan con la consulta de búsqueda.


Comunidad Flutter

Artículos e Historias de la Comunidad de Flutter

Eduardo CQ

Written by

I'm computers technician. Learning flutter/dart mobile apps development . I have knowledge in java, javascript, HTML5,CSS.

Comunidad Flutter

Artículos e Historias de la Comunidad de Flutter

More From Medium

More on Flutter from Comunidad Flutter

More on Flutter from Comunidad Flutter

Anunciando Flutter 1.12: ¡Qué año!

Related reads

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade