es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mostrar datos en Flutter desde una colección de Firestore basados en el valor en el arreglo?

Necesito eliminar documentos – comentarios/publicaciones – del flujo de información, que el usuario ha ocultado. Cuando el usuario decide ocultar la publicación, el documento de publicación de la colección crea una matriz ‘hidingUserId’ de los IDs de usuario que lo han ocultado. Consulte la imagen, por favor.

Ahora necesito eliminar la publicación donde la matriz ‘hidingUserId’ contiene el ID de usuario actual. He intentado lo siguiente, pero no muestra errores en el registro y no muestra las publicaciones. Simplemente un progreso circular circulando en la pantalla.
“`
Stream streams = postRef
.orderBy('estrellas', descending: false)
.orderBy('timestamp', descending: true)
.snapshots();

<pre><code><br /></code></pre>

@override
Widget build(BuildContext context) {
return ListView(
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: 10.0),
children: [
StreamBuilderWrapper(
shrinkWrap: true,
stream: streams.where((event) => event.data()['hidingUserId']
== null
|| event.data()['hidingUserId'].contains(!currentUserId()) ?
streams.forEach((event) => print(event))
: Container(
child: Center(
child: Text('No hay nada que mostrar'),))),
physics: NeverScrollableScrollPhysics(),
itemBuilder: (_, DocumentSnapshot snapshot) {
internetChecker();
Review posts = Review.fromJson(snapshot.data());
return posts.postId != null
? Padding(
padding: const EdgeInsets.only(bottom: 12.0),
child: Posts(post: posts),
)
: Container(
child: Center(
child: Text('No hay nada que mostrar'),
),
);
},
),
],
);
“`

Estoy usando Firestore por primera vez y no puedo encontrar la información que necesito. ¡Cualquier ayuda es muy apreciada! ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar documentos del flujo que el usuario ha ocultado, puede modificar la variable streams en consecuencia utilizando el método where para filtrar los documentos que contienen el ID del usuario actual en el arreglo hidingUserId. Aquí hay un fragmento de código actualizado que debería lograr esto:

    Stream streams = postRef
          .orderBy('stars', descending: false)
          .orderBy('timestamp', descending: true)
          .snapshots();
    
    @override
    Widget build(BuildContext context) {
      return ListView(
        shrinkWrap: true,
        padding: EdgeInsets.symmetric(horizontal: 10.0),
        children: [
          StreamBuilderWrapper(
            shrinkWrap: true,
            stream: streams.where((event) =>
              event.data()['hidingUserId'] == null ||
              !event.data()['hidingUserId'].contains(currentUserId())
            ),
            physics: NeverScrollableScrollPhysics(),
            itemBuilder: (_, DocumentSnapshot snapshot) {
              internetChecker();
              Review posts = Review.fromJson(snapshot.data());
              return posts.postId != null
                ? Padding(
                  padding: const EdgeInsets.only(bottom: 12.0),
                  child: Posts(post: posts),
                )
                : Container(
                  child: Center(
                    child: Text('Nada que mostrar'),
                  ),
                );
            },
          ),
        ],
      );
    }
    

    Los principales cambios realizados aquí se encuentran en el argumento stream de StreamBuilderWrapper. El método where filtra los documentos que contienen el ID del usuario actual en el arreglo hidingUserId utilizando el método contains. El stream actualizado se pasa entonces a StreamBuilderWrapper para poblar la vista de lista.

Comments are closed.