как отформатировать снимки из firebase для отображения списка или установки маркеров для карты

#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. да, я использую ваш код, чтобы создать своего рода сервис. Я все еще не очень хорошо разбираюсь в потоках и интегрирую их в дерево виджетов. Надеюсь, я медленно туда доберусь. Спасибо за совет!