Flutter,是不是可以在没有小部件构建方法的情况下在功能中使用 Firestore Stream Builder?
Posted
技术标签:
【中文标题】Flutter,是不是可以在没有小部件构建方法的情况下在功能中使用 Firestore Stream Builder?【英文标题】:Flutter, Is it possible to use Firestore Stream Builder in function without a widget build method?Flutter,是否可以在没有小部件构建方法的情况下在功能中使用 Firestore Stream Builder? 【发布时间】:2020-01-16 23:06:42 【问题描述】:我有一个函数可以获取 google 地方搜索商店的结果并搜索 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;
);
);
如您所见,我添加了打印语句来找出我的代码失败的地方。 'running 1' 显示,因此场所正在返回响应。
但没有其他语句(2,3 或 4)正在打印,因此流构建器似乎无法正常工作,甚至没有返回空值。
我也尝试在流构建器之前放置一个 return,但这也没有效果。
我的想法是否正确,因为它不在小部件的构建方法中,或者完全是其他东西。
谢谢
【问题讨论】:
【参考方案1】:StreamBuilder
是 Widget
,因此必须插入到小部件树的某个位置,就像插入 Text
小部件一样。只需传递一个流并在其builder
回调中返回另一个小部件
【讨论】:
【参考方案2】:您需要为此使用 Stream 类,例如获取有关名为“users”的集合的所有详细信息,您可以使用,
Stream<QuerySnapshot> stream = _db.collection("users").snapshots();
stream.forEach((QuerySnapshot element)
if(element == null)
return;
for(int count=0;count<element.documents.length;count++)
print(element.documents[count].data.toString());
);
【讨论】:
以上是关于Flutter,是不是可以在没有小部件构建方法的情况下在功能中使用 Firestore Stream Builder?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Navigator.pop 再次运行小部件构建方法
Flutter:如何在构造函数中传递值,以便我可以重用我的小部件?