Jetpack Compose GoogleMap: MarkerComposable выдает исключениеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Jetpack Compose GoogleMap: MarkerComposable выдает исключение

Сообщение Anonymous »

Я работаю с компонуемым GoogleMap впервые с тех пор, как перешел с XML и ClusterRenderer «старым школьным» способом.
Но я создал ClusterMarker, который должен отображать булавку маркера и размер этого кластера в виде числа внутри этого значка булавки.
Это мой элемент:
@Composable
fun BaseClusterMarker(
size: Int,
position: LatLng,
) {
val markerState = rememberMarkerState(position = position)

MarkerComposable(
state = markerState,
content = {
Box(
modifier = Modifier
.size(
width = 40.dp,
height = 47.dp,
),
contentAlignment = Alignment.Center,
) {
Image(
modifier = Modifier
.matchParentSize(),
painter = painterResource(id = R.drawable.map_pin),
contentDescription = "",
)

Text(
modifier = Modifier
.align(Alignment.Center),
color = MainTheme.colors.main.mapColors.pinTextColor,
text = size.toString(),
style = MainTheme.typography.text.medium.bold,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
textAlign = TextAlign.Center,
)

}
},
)
}

Но у меня почему-то получается
java.lang.IllegalStateException: The ComposeView was measured to have a width or height of zero. Make sure that the content has a non-zero size.

Как MarkerComposable выдает это исключение, если Box имеет фиксированный размер?
Компонуемая полная карта:
@OptIn(MapsComposeExperimentalApi::class)
@Composable
fun BaseGoogleMap(
modifier: Modifier = Modifier,
defaultPosition: LatLng = Config.GoogleMap.getDefaultPosition(),
pins: List,
onPinClick: (MapClusterItem) -> Unit,
) {
val context = LocalContext.current
val cameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(defaultPosition, Config.GoogleMap.DEFAULT_ZOOM_LEVEL)
}

val mapStyleOptions = remember {
loadMapStyleOptions(context, R.raw.custommapstyle)
}

val coroutineScope = remember { CoroutineScope(Dispatchers.Main) }

GoogleMap(
modifier = modifier
.fillMaxSize(),
cameraPositionState = cameraPositionState,
uiSettings = MapUiSettings(zoomControlsEnabled = false),
properties = MapProperties(
mapStyleOptions = mapStyleOptions,
),
) {
Clustering(
items = pins,
onClusterClick = { cluster ->
coroutineScope.launch {
cameraPositionState.animate(
CameraUpdateFactory.newLatLngZoom(
cluster.position,
cameraPositionState.position.zoom + 2
),
1000
)
}
true
},
onClusterItemClick = { item ->
onPinClick.invoke(item)
false
},
clusterContent = { cluster ->
BaseClusterMarker(
size = cluster.size,
position = cluster.position,
)
},
clusterItemContent = { item ->
BaseItemMarker(
position = item.position,
)
},
)
}
}

// Helper function to load MapStyleOptions from a JSON file
fun loadMapStyleOptions(context: Context, styleResId: Int): MapStyleOptions? {
return try {
val styleJson = context.resources.openRawResource(styleResId).bufferedReader().use { it.readText() }
MapStyleOptions(styleJson)
} catch (e: Exception) {
e.printStackTrace()
null // Return null if there is an issue loading the style
}
}

Полное исключение:
java.lang.IllegalStateException: The ComposeView was measured to have a width or height of zero. M a k e s u r e t h a t t h e c o n t e n t h a s a n o n - z e r o s i z e . < b r / > a t c o m . g o o g l e . m a p s . a n d r o i d . c o m p o s e . R e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r K t . r e n d e r C o m p o s a b l e T o B i t m a p D e s c r i p t o r ( R e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r . k t : 5 8 ) < b r / > a t c o m . g o o g l e . m a p s . a n d r o i d . c o m p o s e . R e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r K t . a c c e s s $ r e n d e r C o m p o s a b l e T o B i t m a p D e s c r i p t o r ( R e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r . k t : 1 ) < b r / > a t c o m . g o o g l e . m a p s . a n d r o i d . c o m p o s e . R e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r K t . r e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r ( R e m e m b e r C o m p o s e B i t m a p D e s c r i p t o r . k t : 2 9 ) < b r / > a t c o m . g o o g l e . m a p s . a n d r o i d . c o m p o s e . M a r k e r K t . M a r k e r C o m p o s a b l e - K h g _ O n I ( M a r k e r . k t : 3 1 3 ) < b r / > a t c o m . d a m i d e v . y b o x 2 4 . u i . c o m p o s e . m a p . B a s e G o o g l e M a p K t . B a s e I t e m M a r k e r ( B a s e G o o g l e M a p . k t : 1 2 4 ) < b r / > a t c o m . d a m i d e v . y b o x 2 4 . u i . c o m p o s e . m a p . C o m p o s a b l e S i n g l e t o n s $ B a s e G o o g l e M a p K t $ l a m b d a - 2 $ 1 . i n v o k e ( B a s e G o o g l e M a p . k t : 1 0 0 ) < b r / > a t c o m . d a m i d e v . y b o x 2 4 . u i . c o m p o s e . m a p . C o m p o s a b l e S i n g l e t o n s $ B a s e G o o g l e M a p K t $ l a m b d a - 2 $ 1 . i n v o k e ( B a s e G o o g l e M a p . k t : 9 9 ) < b r / > a t a n d r o i d x . c o m p o s e . r u n t i m e . i n t e r n a l . C o m p o s a b l e L a m b d a I m p l . i n v o k e ( C o m p o s a b l e L a m b d a . j v m . k t : 1 1 8 ) < b r / > a t a n d r o i d x . c o m p o s e . r u n t i m e . i n t e r n a l . C o m p o s a b l e L a m b d a I m p l . i n v o k e ( C o m p o s a b l e L a m b d a . j v m . k t : 3 5 ) < b r / > a t c o m . g o o g l e . m a p s . a n d r o i d . c o m p o s e . c l u s t e r i n g . C o m p o s e U i C l u s t e r R e n d e r e r $ c r e a t e A n d A d d V i e w $ v i e w $ 2 . i n v o k e ( C l u s t e r R e n d e r e r . k t : 9 5 ) < b r / > a t c o m . g o o g l e . m a p s . a n d r o i d . c o m p o s e . c l u s t e r i n g . C o m p o s e U i C l u s t e r R e n d e r e r $createAndAddView$view$2.invoke(ClusterRenderer.kt:95)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at com.google.maps.android.compose.clustering.ComposeUiClusterRenderer$InvalidatingComposeView.Content(ClusterRenderer.kt:220)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:259)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:258)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:380)
at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:216)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:132)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:131)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:380)
at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:121)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:155)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:154)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:401)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:154)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:133)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)


Подробнее здесь: https://stackoverflow.com/questions/791 ... -exception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Jetpack Compose GoogleMap: MarkerComposable выдает исключение
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Jetpack Compose GoogleMap: MarkerComposable выдает исключение
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Отображение LazyRow ElevatedCards внизу карты GoogleMap в Jetpack Compose
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как панорамировать компонуемый GoogleMap внутри ModalBottomSheet в JetPack Compose
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как панорамировать компонуемый GoogleMap внутри ModalBottomSheet в JetPack Compose
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»