我有一个函数,该函数获取Google Places搜索商店的结果并搜索Firestore以查看商店是否已在数据库中。
每当我运行它时,它都会认为Stream Builder无所作为。
我认为问题在于该函数不在小部件内并且没有构建方法。这是代码:
void searchStores() async {
Prediction newStore = await PlacesAutocomplete.show(
context: context,
apiKey: kGoogleApiKey,
mode: Mode.overlay,
language: "en",
components: [new Component(Component.country, "au")]);
await places.getDetailsByPlaceId(newStore.placeId).then((detailStoreInfo) {
print('running 1');
StreamBuilder (
stream: Firestore.instance.collection('stores').document(detailStoreInfo.result.id).snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot){
print('running 2');
setState(() {
if (snapshot.connectionState == ConnectionState.active &&
snapshot.hasData){
print('running 3');
if (snapshot.data['veganOnly'] == null || snapshot.data['veganOnly'] == false){
print('running 4');
setState(() {
firstStore = true;
});
}
}
});
return null;
}
);
});
}
如您所见,我添加了打印语句来确定代码失败的地方。显示“正在运行1”,因此场所正在返回响应。
但是没有其他语句(2,3或4)正在打印,因此流构建器似乎无法正常工作,甚至没有返回空值。
我还尝试在流生成器之前放置一个返回值,但这也没有任何效果。
我是否认为这是正确的,因为它不在小部件的构建方法中,或者完全不是其他东西。
谢谢
最佳答案
StreamBuilder
是Widget
,因此必须像在Text
小部件中一样,将其插入小部件树中的某个位置。只需将其传递给流,然后在builder
回调中返回另一个小部件
关于firebase - Flutter,是否可以在没有窗口小部件构建方法的情况下在功能中使用Firestore Stream Builder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951293/