我无法获得未来的结果

时间:2019-08-22 14:22:04

标签: flutter dart

我有这个initState:

@override
  void initState() {
    super.initState();
    _initState();
  }
  _initState() async {
    _geIdsList().then((result) {
      _idList = result;
      print('result $_idList');
    }, onError: (e) {
      print('error $e');
    });
  }

然后是我的功能,可以从Firestore中获取ID:

Future<List<String>> _geIdsList() async {
  List<String> ids = [];
  StreamSubscription stream;
  Firestore _firestore = Firestore.instance;
  Geoflutterfire geo;
  var collectionReference = _firestore.collection('locations');
  geo = Geoflutterfire();
  var location = new Location();
  var pos = await location.getLocation();
  var radius = BehaviorSubject<double>.seeded(10.0);
  GeoFirePoint center = geo.point(latitude: pos.latitude.toDouble(), longitude: pos.longitude.toDouble());

  stream = radius.switchMap((rad) {
    return geo.collection(collectionRef: collectionReference).within(
        center: center, radius: rad, field: 'position', strictMode: true);
  }).listen((List<DocumentSnapshot>  documentList) {
    Future.forEach(documentList, (DocumentSnapshot documentSnapshot)   {
        print('document here ... $documentSnapshot' );
        print(documentSnapshot.data['id']);
        var id = documentSnapshot.data['id'].toString();
        ids.add(id);
    }).whenComplete(() {
      stream.cancel();
      print('ids from function $ids');
      return ids;
    });
  });
}

现在_getIdsList()工作正常,并且

  

完成打印后('ids from function $ ids');

行,打印ID列表,我不明白为什么它在我的initState中不起作用。谁能告诉我我的代码出了什么问题?

0 个答案:

没有答案