繁体   English   中英

将获取的值传递给对 flutter 的 streambuilder 的 firestore 引用

[英]Pass fetched value to a firestore reference to flutter's streambuilder

我正在访问 Firestore 中groupfav内用户最喜欢的组,当我得到它时,我想将它作为对 streambuilder stream:的参考的一部分,以便它知道在列表中显示什么,但我不能' t传递包含最喜欢的组的变量,我应该做什么或者我做错了什么?

static String? userID = FirebaseAuth.instance.currentUser?.uid; // get current user id
  static var taskColeccion = FirebaseFirestore.instance.collection("usuarios");
  var tack = taskColeccion.doc("$userID").get().then((value) {
    var groupfav = value.data()!["groupfav"]; // value i get from firestore
    return groupfav;
  });

  late Stream<QuerySnapshot> task = FirebaseFirestore.instance
  .collection("groups")
  .doc(groupfav) // pass the obtained value 
  .collection("tareas")
  .snapshots();

Firestore 的照片

照片显示了 Firestore 的逻辑,绿色标记的值是我必须传递给late Stream<QuerySnapshot> task...在它的参考中,逻辑上它是一个我不知道的随机值。 谢谢你的帮助!

这就是代码现在的样子(我拿走了不重要的东西)

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  static String? userID = FirebaseAuth.instance.currentUser?.uid;
  static final taskColeccion =
      FirebaseFirestore.instance.collection("usuarios");
  String groupfav = '';
  final tack = taskColeccion.doc("$userID").get().then((value) {
    groupfav = value.data()!["groupfav"];
    return groupfav;
  });

  Stream<QuerySnapshot> task = FirebaseFirestore.instance
      .collection("groups")
      .doc(groupfav) // pass the obtained value
      .collection("tareas")
      .snapshots();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Home"),
        automaticallyImplyLeading: false,
      ),
      body: StreamBuilder(
        stream: task,
        builder: (
          BuildContext context,
          AsyncSnapshot<QuerySnapshot> snapshot,
        ) {
          if (snapshot.hasError) {
            return const Text("error");
          }
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Text("cargando");
          }
          final data = snapshot.requireData;

          return ListView.builder(
            itemCount: data.size,
            itemBuilder: (context, index) {
              return Card(
                child: ListTile(
                  title: Text("${data.docs[index]['titulo']}"),
                  subtitle: Text("${data.docs[index]['contenido']}"),
                  onTap: () {},
                  trailing: IconButton(
                    icon: const Icon(Icons.delete),
                    color: Colors.red[200],
                    onPressed: () {
                      // delete function
                    },
                  ),
                ),
              );
            },
          );
        },
      ),
    );
  }
}

您只需要在 taskColeccion 的get方法的groupfav之外声明taskColeccion

按照您的方式,当您尝试将变量传递给task stream 时,该变量已不存在。

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  static String? userID = FirebaseAuth.instance.currentUser?.uid;
  static final taskColeccion =
      FirebaseFirestore.instance.collection("usuarios");

  String groupfav = '';

  late Stream<QuerySnapshot> task;

  @override
  void initState() {
    super.initState();
    taskColeccion.doc("$userID").get().then((value) {
      groupfav = value.data()!["groupfav"];
      return groupfav;
    });

    task = FirebaseFirestore.instance
        .collection("groups")
        .doc(groupfav) // pass the obtained value
        .collection("tareas")
        .snapshots();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM