#flutter #dart
Вопрос:
Как я могу хранить данные firebase, чтобы использовать их для маркеров на карте Google?
late CollectionReference vendorLocCollection =
FirebaseFirestore.instance.collection('vendorlocations');
late List vendors = [];
Future <void> populateVendors() async {
Map<dynamic, dynamic> marker = <MarkerId, Marker> {}; //from dynamic in snapshot to marker
final _vendorSnapshots = await vendorLocCollection.snapshots();
_vendorSnapshots.listen((result) {
result.docs.forEach((result) { //how do i extract the result so i can use
// it as marker? :
vendors.add(result.data());
print(vendors);
});
});
}
Ответ №1:
Анализ результатов снимков firebase и размещение маркеров на картах Google-это две разные вещи.
Шаг 1: Сериализация данных
Поскольку мы получаем данные в формате JSON, мы сначала меняем их на типы данных dart. Мы можем использовать что-то вроде этого.
class VendorLocations {
String uid;
double latitude;
double longitude;
VendorLocations(this.uid, this.latitude, this.longitude);
}
...
vendors = (result.data() as List)
.map((e) {
return VendorLocations(e['uid'], e['latitude'], e['longitude']);
})
.toList();
Шаг 2: Поместите маркер на карту Google
Создайте объекты-маркеры из vendors
списка.
final markerId = vendors[0].uid; /// or something else
final Marker m = Marker(
markerId: markerId,
position: LatLng(
vendors[0].latitude,
vendors[0].longitude,
),
/// specify other parameters as needed
);
marker[markerId] = m;
// update UI
Это создает новый маркер. Все маркеры можно добавить, выполнив приведенный выше фрагмент кода в цикле.
Ссылка : google_maps_flutter
Комментарии:
1. Спасибо! Есть ли способ сделать это за один раз, например, на лету обработать поток снимков на карту и назначить идентификатор маркера? Моя цель-отображать маркеры по мере их перемещения на карте.
2. @NinFudj на лету, я предполагаю, что вы имеете в виду, что не используете
VendorLocation
класс. Смотрите, какие требования предъявляются к маркерам (например, широта(двойная), долгота(двойная) и идентификатор(строка)). Вы должны преобразовать список строк в список значений, упомянутых выше. Эта часть разбора должна быть выполнена. Теперь я записался на новый курс. Но вы можете пропустить это и непосредственно проанализировать в функции.3. да, я использую ваш код, чтобы создать своего рода сервис. Я все еще не очень хорошо разбираюсь в потоках и интегрирую их в дерево виджетов. Надеюсь, я медленно туда доберусь. Спасибо за совет!