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

Eduardo CQ
Comunidad Flutter
Published in
3 min readDec 5, 2019

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.

Fuente (Stack overflow)

¿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.

--

--