Flutter перестраивает только текущую точку на карте (setState) - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь реализовать текущее местоположение пользователя на карте, используя Flutter и несколько плагинов (flutter_map, location, et c.). Но у меня есть проблемы с производительностью, вероятно, вызванные методом setState(), который вызывает build() Функция каждый раз, когда в потоке появляется какое-то значение.

Мне нужно перестроить только одну часть в виджете FlutterMap, но с этим мало проблем. Обычно я использую отдельный виджет с состоянием, но PolyLineOptions принимает только список типа Polyline.

Вот мой код (функция построения)

  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        FlutterMap(
          options: MapOptions(
            center: LatLng(lat, lng),
            zoom: 15,
            minZoom: 14,
            maxZoom: 18,
          ),
          layers: [
            TileLayerOptions(
              urlTemplate: mapUrl,
              subdomains: ['a', 'b', 'c'],
            ),
   ->       PolylineLayerOptions(polylines: currentPosition),
            MarkerLayerOptions(
              markers: parkingLotsMarkers,
            ),
          ],
        ),
      ],
    );
  }

Поток с текущим местоположением - каждый раз, когда появляется новое значение, массив с маркером будет обновлен, и при этом все дерево виджетов будет перестроено.

  void _getCurrentLocation() {
    subscription = location.onLocationChanged().listen((l) {
      print("listenin");
      setState(() {
        currentPosition = [
          Polyline(
            points: [LatLng(l.latitude, l.longitude)],
            strokeWidth: 8,
            color: Color.fromRGBO(33, 150, 243, 1),
          ),
          Polyline(
            points: [LatLng(l.latitude, l.longitude)],
            strokeWidth: 30,
            color: Color.fromRGBO(33, 150, 243, .2),
          )
        ];
      });
    });
  }

У вас, ребята, есть идеи, как решить эту проблему? Большое спасибо!

...