我在 Firebase 上有两个集合,一个称为“用户”,另一个称为“公司”。
我有两个正在尝试集成的应用程序,因此与用户集合相关的最终用户应用程序,我希望它通过与公司应用程序相关的公司集合进行查询,并使用 GeoFlutterFire 显示附近的公司最终用户应用程序,以某种列表或类似形式。
我现在拥有的:
我可以将位置数据存储到经度和纬度的两个集合中,但我现在不知道如何显示例如附近的公司名称。
我有两个功能,不确定哪个最接近正确,所以我将两者都发布。
第一个功能
Stream showNearbyCompanies() async* {
var pos = await location.getLocation();
GeoFirePoint point =
geo.point(latitude: pos.latitude, longitude: pos.longitude);
double distance = 30;
double lat = 0.023323826086956514;
double lon = 0.02926080000000002776;
double lowerLat = point.latitude - (lat * distance);
double lowerLon = point.longitude - (lon * distance);
double greaterLat = point.latitude + (lat * distance);
double greaterLon = point.longitude + (lon * distance);
GeoPoint lesserGeoPoint = GeoPoint(lowerLat, lowerLon);
GeoPoint greaterGeoPoint = GeoPoint(greaterLat, greaterLon);
Query query = _firebaseFirestore
.collection("Companies")
.where("location", isGreaterThan: lesserGeoPoint)
.where("location", isLessThan: greaterGeoPoint);
yield query;
}
第二个功能
Stream nearbyComp() async* {
var pos = await location.getLocation();
GeoFirePoint point =
geo.point(latitude: pos.latitude, longitude: pos.longitude);
final CollectionReference users =
_firebaseFirestore.collection("Companies");
double radius = 10;
String field = 'location';
Stream<List<DocumentSnapshot>> stream = geo
.collection(collectionRef: users)
.within(center: point, radius: radius, field: field);
yield stream;
}
我想我应该尝试返回一个 StreamBuilder 来检查连接,返回加载,否则,返回列表或从当前最终用户附近的集合公司检索到的数据。像这样:
Container(
child: StreamBuilder(
stream: showNearbyCompanies(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("Loading");
}
//return ListView.builder ?
}