【发布时间】:2019-10-01 12:49:36
【问题描述】:
这个想法是在 Firebase 的集合中显示来自随机文档的字符串。一个简单的函数 getRandom() 检索文档总数并生成一个随机整数 r,该整数被馈送到 Firebase 实例中。
应用中的输出始终为null。
StreamBuilder(
initialData: Words(),
stream: getWords(),
builder: (context, snapshot){
if(!snapshot.hasData){
return Center(child: Text("NO DATA"));
}else {
var r = snapshot.data;
return Center(child: Text("${r.english}"));
}
})
Stream<Words> getWords() async* {
int r = await getRandom();
print("RANDOM NO: " + "$r");
Firestore.instance.document("vocabs/foods/words/$r")
.get()
.then((snapshot){
try {
return Words().english;
} catch(e){
print("ERROR");
return null;
}
});
}
class Words{
Words(): super();
String english;
Words.fromSnapshot(DocumentSnapshot snapshot)
: english = snapshot.data["english"];
}
【问题讨论】:
-
对于异步生成器,关键字
yield或yield*不是 return 吗?此外,似乎返回类型应该是Stream<String>,因为您正在产生Word的english字符串。 -
@DanielV。
Stream<String确实更有意义。yield在then- 回调中是不可能的。它必须是return,但到目前为止它仍然返回null。
标签: firebase dart flutter google-cloud-firestore