我正在Firestore中使用数据库。我的一些文档本身包含特定的收藏夹,我想使用Flutter应用程序。 因此,我有一个包含文档的常规文档集,文档本身也包含文档集。
我的问题是我不知道如何使用ListView中的onTap函数打开正确的子集合。
我的第一个ListView当前只是一个带有两个文本变量的简单列表。当点击此ListView中的一项时,我的应用程序应该打开一个Flexible,其中包含第二个List和一个地图。它基本上是一个交互式GoogleMap和POI列表。数据库条目包含一些字符串以及Geolocation坐标。
我有两个独立的代码部分,但是我现在需要将它们结合起来。 我不知道合适的方法。
这是我的第一个简单的ListView
´´´
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('tours_collection').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting: return new Text('Loading...');
default:
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['name']),
subtitle: new Text(document['region']),
onTap: () {
},
);
}).toList(),
);
}
},
);
}
´´´
这是我的Flexible,带有第二个特定的列表和地图
´´´
return Scaffold(
body: StreamBuilder<QuerySnapshot>(
stream: ???,
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
}
if (!snapshot.hasData) {
return Center(child: const Text('Loading...'));
}
return Column(
children: <Widget>[
Flexible(
flex: 2,
child: TourMap(
documents: snapshot.data.documents,
initialPosition: const LatLng(-33.870663, 151.206793),
mapController: _mapController,
),
),
Flexible(
flex: 3,
child: TourList(
documents: snapshot.data.documents,
mapController: _mapController),
)
],
);
},
),
);
´´´
特别是在第二部分中,我不知道是否需要另一个流引用。
在这张照片中,您可以看到我的第一份文档列表,该列表当前仅包含两个字符串“ name”和“ region”
此图显示了其中一个文档(Sydney Citytour中的sydney_spots)的集合中的一个特定条目。有地理位置参考和一个用于标记目的的ID字符串。