如何在 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 的变量,以便您可以在任何函数上使用它。
我在有状态小部件中有一个异步函数。在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 的变量,以便您可以在任何函数上使用它。