#flutter #maps #marker
Вопрос:
У меня есть список мест в firestore:
когда я загружаю их с помощью streambuilder для заполнения карты, я хотел бы отфильтровать маркеры на основе их расстояния от текущего местоположения.
на данный момент я делаю это таким образом, используя видимый тег на маркере (здесь в качестве примера я отфильтровал только маркеры с расстоянием менее 150 м):
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('segnalazioni').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
return Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Stack(
children: [
GoogleMap(
myLocationButtonEnabled: false, //true,
initialCameraPosition:
CameraPosition(target: _initialcameraposition),
mapType: MapType.normal,
onMapCreated: _onMapCreated,
myLocationEnabled: true,
markers: snapshot.data!.docs.map(
(document) {
int distance = Geolocator.distanceBetween(
_currentPosition.latitude!,
_currentPosition.longitude!,
document['posizione'].latitude,
document['posizione'].longitude,
).round();
return Marker(
markerId: MarkerId(document.id),
position: LatLng(
double.parse('${document['posizione'].latitude}'),
double.parse('${document['posizione'].longitude}'),
),
visible: distance < 150 ? true : false,
);
},
).toSet(),
Я чувствую, что это не самое разумное решение, потому что я загружаю маркеры, даже если они не соответствуют критериям, просто я их не показываю.
Как я могу отфильтровать их на более высоком уровне? могу ли я отфильтровать их внутри функции .map?
Второй вопрос: правильно ли использовать streambuilder для заполнения карты маркерами?