Skip to content

Commit 3dfd6bf

Browse files
authored
fix: Fix NoSuchElementException when rendering custom cluster content (#280)
* fix: Fix NoSuchElementException when rendering custom cluster content * Create new ViewInfo as a fallback
1 parent c82444f commit 3dfd6bf

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

  • maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering

maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ internal class ComposeUiClusterRenderer<T : ClusterItem>(
8383
}
8484
}
8585

86-
private fun createAndAddView(key: ViewKey<T>) {
86+
private fun createAndAddView(key: ViewKey<T>): ViewInfo {
8787
val view = InvalidatingComposeView(
8888
context,
8989
content = when (key) {
@@ -101,13 +101,15 @@ internal class ComposeUiClusterRenderer<T : ClusterItem>(
101101
collectInvalidationsAndRerender(key, view)
102102
}
103103

104-
keysToViews[key] = ViewInfo(
104+
val viewInfo = ViewInfo(
105105
view,
106106
onRemove = {
107107
rerenderJob.cancel()
108108
renderHandle.dispose()
109109
},
110110
)
111+
keysToViews[key] = viewInfo
112+
return viewInfo
111113
}
112114

113115
/** Re-render the corresponding marker whenever [view] invalidates */
@@ -145,8 +147,9 @@ internal class ComposeUiClusterRenderer<T : ClusterItem>(
145147
override fun getDescriptorForCluster(cluster: Cluster<T>): BitmapDescriptor {
146148
return if (clusterContentState.value != null) {
147149
val viewInfo = keysToViews.entries
148-
.first { (key, _) -> (key as? ViewKey.Cluster)?.cluster == cluster }
149-
.value
150+
.firstOrNull { (key, _) -> (key as? ViewKey.Cluster)?.cluster == cluster }
151+
?.value
152+
?: createAndAddView(cluster.computeViewKeys().first())
150153
renderViewToBitmapDescriptor(viewInfo.view)
151154
} else {
152155
super.getDescriptorForCluster(cluster)
@@ -158,8 +161,9 @@ internal class ComposeUiClusterRenderer<T : ClusterItem>(
158161

159162
if (clusterItemContentState.value != null) {
160163
val viewInfo = keysToViews.entries
161-
.first { (key, _) -> (key as? ViewKey.Item)?.item == item }
162-
.value
164+
.firstOrNull { (key, _) -> (key as? ViewKey.Item)?.item == item }
165+
?.value
166+
?: createAndAddView(ViewKey.Item(item))
163167
markerOptions.icon(renderViewToBitmapDescriptor(viewInfo.view))
164168
}
165169
}

0 commit comments

Comments
 (0)