Open zombie6888 opened 2 months ago
Выяснил что краши происходят если добавлять метки с кастомным view, у которого в разметке есть картинка networkImage или AssetImage:
for (final location in locations) {
clusterizedCollection.addPlacemarkWithView(
location,
ViewProvider(
builder: () => SizedBox(
width: 40,
height: 40,
child: Image.asset('assets/ic_circle.png')),
configurationFactory: (data) => ViewConfiguration(
physicalConstraints: BoxConstraints.tight(data.size),
logicalConstraints: BoxConstraints.tight(data.size),
devicePixelRatio: data.devicePixelRatio)));
}
clusterizedCollection.clusterPlacemarks(
clusterRadius: _clusterRadius,
minZoom: _clusterMinZoom,
);
Прилагаю пример, по сути немного измененный пример из map_objects с репозитория mapkit-samples Для воспроизведения обычно достаточно сделать зум до минимума и немного подвигать картой или просто понажимать zoomIn/zoomOut:
Выяснил что краши происходят если добавлять метки с кастомным view, у которого в разметке есть картинка networkImage или AssetImage:
У меня проблема воспроизводится не только с NetworkImage или AssetImage, а с любыми пинами, если их достаточно много. Вот так, например, просто с синими квадратами, при чем там все что только можно const:
void _addClusterizedPlacemarks(
mapkit.ClusterizedPlacemarkCollection clusterizedCollection,
) {
const constraints = BoxConstraints(
maxHeight: 40,
maxWidth: 40,
minHeight: 40,
minWidth: 40,
);
final view = ViewProvider(
id: 'my_id',
builder: () {
return const SizedBox(
width: 40,
height: 40,
child: ColoredBox(color: Colors.blue),
);
},
configurationFactory: (data) => const ViewConfiguration(
physicalConstraints: constraints,
logicalConstraints: constraints,
),
cacheable: true,
);
for (final location in locations) {
clusterizedCollection.addPlacemarkWithView(
location,
view,
);
}
clusterizedCollection.clusterPlacemarks(
clusterRadius: _clusterRadius,
minZoom: _clusterMinZoom,
);
}
В версии 4.7.2-beta6 вот такие ошибки сыпятся как раз перед крашем
════════ Exception caught by widgets library ═══════════════════════════════════
The following NativeNullException was thrown building MapCluster(dirty):
access to deleted native object.
The relevant error-causing widget was:
MapCluster MapCluster:file:///Users/marioboy/development/doctis/temp/mapkit-flutter-demo/mapkit-samples/map_objects_new/lib/main.dart:73:28
When the exception was thrown, this was the stack:
#0 checkCallResult (package:yandex_maps_mapkit_lite/src/bindings/common/exception.dart:52:5)
exception.dart:52
#1 ClusterImpl.placemarks (package:yandex_maps_mapkit_lite/src/mapkit/map/cluster.impl.dart:53:15)
cluster.impl.dart:53
#2 MapCluster.build (package:map_objects/widgets/map_cluster.dart:14:27)
map_cluster.dart:14
#3 StatelessElement.build (package:flutter/src/widgets/framework.dart:5687:49)
framework.dart:5687
#4 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5617:15)
framework.dart:5617
#5 Element.rebuild (package:flutter/src/widgets/framework.dart:5333:7)
framework.dart:5333
#6 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599:5)
framework.dart:5599
#7 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593:5)
framework.dart:5593
... Normal element mounting (19 frames)
#26 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468:16)
framework.dart:4468
#27 Element.updateChild (package:flutter/src/widgets/framework.dart:3963:18)
framework.dart:3963
#28 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/adapter.dart:143:16)
adapter.dart:143
#29 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/adapter.dart:112:5)
adapter.dart:112
#30 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/adapter.dart:61:18)
adapter.dart:61
#31 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:3038:19)
framework.dart:3038
#32 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/adapter.dart:60:13)
adapter.dart:60
#33 ViewProvider._drawWidget (package:yandex_maps_mapkit_lite/src/bindings/ui_view/view_provider.dart:64:7)
view_provider.dart:64
<asynchronous suspension>
#34 ImageProviderHeap._getImageProviderResult (package:yandex_maps_mapkit_lite/src/bindings/image/image_provider.dart:82:19)
image_provider.dart:82
<asynchronous suspension>
#35 ImageProviderHeap.requestData.<anonymous closure> (package:yandex_maps_mapkit_lite/src/bindings/image/image_provider.dart:94:15)
image_provider.dart:94
<asynchronous suspension>
Спустя какое то время после манипуляций с картами приложение может зависнуть или крашнутся.
Лог с эмулятора:
Такие ошибки libc на реальном устройстве в релизе:
Версия mapkit 4.7.0-beta