我有这段代码试图使用GeoFlutterFire从Firestore查询一些数据,但是为了提高效率,我只希望一次获取ID列表,然后使用它从Firebase数据库中获取其余数据。 这是有问题的代码:
class _StartScreenState extends State<StartScreen> {
List ids = ['abc'];
@override
void initState() {
super.initState();
print('ids ${ids}');
}
_initState() async {
Firestore _firestore = Firestore.instance;
List ids1 = [];
Geoflutterfire geo = Geoflutterfire();
var location = new Location();
var pos = await location.getLocation();
GeoFirePoint center = geo.point(latitude: pos.latitude.toDouble(), longitude: pos.longitude.toDouble());
var collectionReference = _firestore.collection('locations');
var geoRef = geo.collection(collectionRef: collectionReference);
return ids1.add(geoRef.within(center: center, radius: 50, field: 'position', strictMode: true).first.then((value) {
value.map((doc) {
if (doc.data.isNotEmpty) {
print('doooc id here ${doc['id']}');
ids1.add(doc['id']);
print(ids1);
}
}).toList();
setState(() {
ids = ids1;
print('setting state to ids ids print: ${ids.}');
});
}));
}
就像我说的那样,我的目的是获取Ids,并且一旦我有了列表,就会检查Firebase中是否有一些相关数据,但是我不确定这是我应该这样做的方式,并且有些事情我不做。不知道该如何做当我打印列表时,我得到以下结果:
将状态设置为id id打印:['Future'的实例, 3esdWesqrTD_123_3dssds3,sQWdsda23dsad_da21]
谁能告诉我为什么我的清单中有这个“未来”实例,如何避免呢?
答案 0 :(得分:1)
我尚未尝试运行您的代码,但我怀疑问题始于该语句
return ids1.add(geoRef.within(center: center, radius: 50, field: 'position', strictMode: true).first.then((value) {
如您所见,您正在向ids1.add(...)
添加await
:geoRef.within(...).first.(...)
。我在return语句中找不到需要的ids1.add(...)
调用。尝试将其删除,然后看看它如何运行。