Как оптимизировать приложение для эффективного отображения большего количества маркеров на карте Google во флаттере? - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над проектом, в этом проекте мне нужно отображать маркеры на карте из базы данных. В базе данных у меня есть около 6000+ данных о клиентах, и я хочу отобразить там информацию на картах, используя там широту и долготу. Проблема состоит в том, что, когда есть запись только 5-10 клиентов, приложение не замедляется, но когда я отображаю тысячи маркеров на карте, приложение начинает отставать. Есть ли лучший способ решить эту проблему?

код для отображения маркеров на карте

_onMapCreated() async {
    // print(customerInfo);
    for (var item in ud.customerInfo) {
      if (item['customer_latitude'] == "" && item['customer_longitude'] == "") {
        continue;
      } else {
        final MarkerId markerId = MarkerId((markers.length + 1).toString());
        LatLng markerPos = LatLng(double.parse(item['customer_latitude']),
            double.parse(item['customer_longitude']));
        final Marker marker = Marker(
            infoWindow: InfoWindow(
              title: item['customer_name'],
              snippet: item['customer_desc'],
            ),
            // onTap: () => _onMarkerTapped(markerId),
            icon: BitmapDescriptor.defaultMarkerWithHue(
                item['customer_status'] == 'red'
                    ? BitmapDescriptor.hueRed
                    : item['customer_status'] == 'yellow'
                        ? BitmapDescriptor.hueYellow
                        : BitmapDescriptor.hueGreen),
            markerId: markerId,
            consumeTapEvents: true,
            position: markerPos,
            onTap: () {
              Navigator.push(
                  context,
                  MaterialPageRoute<Null>(
                    builder: (BuildContext context) {
                      return CustomerDetail(
                          item['customer_id'],
                          item['customer_name'],
                          item['customer_email'],
                          item['customer_desc'],
                          item['customer_phone'],
                          item['customer_status']);
                    },
                    fullscreenDialog: true,
                  ));
            });
        _markers = null;
        markers[markerId] = marker;
      }
    }
    setState(() {});
  }

еще одна точка, данные уже получены из базы данных и сохранены в списке, поэтому во время l oop он просто получает данные из списка и отображает их на картах Google.

1 Ответ

0 голосов
/ 09 апреля 2020

Рендеринг тысячи маркеров на карте Google еще не оптимизирован во флаттере, я думаю, вам нужно выполнить кластеризацию, чтобы решить эту проблему, например: кластеризация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...