如何在 flutter 中访问异步函数中的字符串

How to access a String in a async function in flutter

我在有状态小部件中有一个异步函数。在BuildContext下,我有这个功能,

getChildren() async {
      final String numberOfChildren = await FirebaseFirestore.instance
          .collection("children")
          .where("parentUID", isEqualTo: uid)
          .snapshots()
          .length
          .toString();
    }

如何在文本小部件中使用 numberOfChildren 变量。

            Text(
                'Children: $numberOfChildren',
                style: TextStyle(
                  fontSize: 22,
                  color: Color(0xff74828E),
                  fontFamily: 'Rubik',
                  fontWeight: FontWeight.w900,
                ),
              ),

但是它说 numberOfChild

如何在文本小部件中使用它?

StreamBuilder<QuerySnapshot>(
    stream: FirebaseFirestore.instance
          .collection("children")
          .where("parentUID", isEqualTo: uid)
          .snapshots(), // async work
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
       switch (snapshot.connectionState) {
         case ConnectionState.waiting: return Text('Loading....');
         default:
           if (snapshot.hasError)
              return Text('Error: ${snapshot.error}');
           else
          return Text(
                'Children: ${snapshot.data.docs.length}');
        }
      },
    )

这是因为变量 numberOfChildren 是该函数的局部变量。您可以做的是通过在 class 内声明变量使其成为全局变量,即

String numberOfChildren;
getChildren() async {
  numberOfChildren = await FirebaseFirestore.instance
      .collection("children")
      .where("parentUID", isEqualTo: uid)
      .snapshots()
      .length
      .toString();
}

这是 OOP 的基础知识 您必须使 numberOfChildren 成为 class 的变量,以便您可以在任何函数上使用它。