Я пытаюсь реализовать текущее местоположение пользователя на карте, используя 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),
)
];
});
});
}
У вас, ребята, есть идеи, как решить эту проблему? Большое спасибо!