【发布时间】:2021-11-11 12:12:05
【问题描述】:
我创建了一个函数,我想返回数据库中半径内的所有位置。这就是我使用 GeoFlutterFire 的原因。我的问题是我不知道如何将 Stream>>>
转换为我的 Class 类型的 List。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:geoflutterfire/geoflutterfire.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:uerto/models/index.dart';
class SearchApi {
const SearchApi({required FirebaseAuth auth, required FirebaseFirestore firestore, required FirebaseStorage storage, required Geoflutterfire geo})
: _auth = auth,
_firestore = firestore,
_storage = storage,
_geo = geo;
final FirebaseAuth _auth;
final FirebaseFirestore _firestore;
final FirebaseStorage _storage;
final Geoflutterfire _geo;
Future<List<AppClient>> getClientList() async{
final List<AppClient> newResult = <AppClient>[];
final GeoFirePoint center = _geo.point(latitude: 44.414445, longitude: 26.01135501);
final CollectionReference<Map<String, dynamic>> collectionReference = _firestore.collection('clients/London/Beauty');
final double radius = 5000;
const String field = 'point';
final Stream<List<DocumentSnapshot<Map<String, dynamic>>>> stream = _geo.collection(collectionRef: collectionReference).within(center: center, radius: radius, field: field);
///something to transform Stream<List<DocumentSnapshot<Map<String, dynamic>>>> stream into List<AppClient> result;
newResult.addAll(result);
return newResult;
}
}
【问题讨论】:
-
也许只需访问流中的片刻即可一次获取一个列表。因为您的流不是列表。如果您不需要将流留在一个对象中,您可以将流分块为更小的列表记录。
-
参见
Stream.first属性例如 - 文档说:“此流的第一个元素。收到第一个元素后停止侦听此流。”
标签: firebase flutter dart google-cloud-firestore geohashing