簡體   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