@@ -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