Status Update
Comments
ys...@google.com <ys...@google.com> #2
It appears to be that the lambda parameter in rememberPlaceholderState doesn't get recomputed when item changes.
@Composable
private fun PagingItemCard(
item: PagingItem?,
modifier: Modifier = Modifier,
onClick: () -> Unit = {}
) {
val chipPlaceholderState = rememberPlaceholderState { item != null }
workaround is
val chipPlaceholderState =
if (item != null) rememberPlaceholderState { true } else rememberPlaceholderState { false }
ys...@google.com <ys...@google.com> #3
Seems like a buggy custom wear compose integration with androidx.paging. No events triggered when paging placeholders (null) are replaced by content.
val showPlaceholder by remember { derivedStateOf { item != null } }
The above continues to print false.
ys...@google.com <ys...@google.com> #4
Reopening because this prints "true false"
val showPlaceholder by remember(item) { derivedStateOf { item != null } }
val chipPlaceholderState = rememberPlaceholderState { showPlaceholder }
Text("$showPlaceholder ${chipPlaceholderState.isShowContent}")
I suspect rememberPlaceholderState should have keys provided to it.
ys...@google.com <ys...@google.com> #5
Also the preview samples are correctly using mutableStateOf for updating the item, so should be working.
ys...@google.com <ys...@google.com> #6
From
When remembering a lambda, pass any captured variables as keys to remember so that the lambda will be recreated if those variables change.
jn...@google.com <jn...@google.com>
ys...@google.com <ys...@google.com> #7
Internally it has been commented that the right fix is probably for the existing rememberPlaceholderState to use rememberUpdatedState for the lambda.
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit a08d3c02b5babbf8587bb1498009b6f64e624e81
Author: John Nichol <jnichol@google.com>
Date: Fri Dec 02 12:12:33 2022
Update PlaceholderState to ensure that the state is updated if the onContentReady() lambda changes.
Update PlaceholderState to take a State<() -> Boolean> for the isContentReady lambda and update rememberPlaceholderState so that the lambda is wrapped in rememberUpdatedState so that the state will be updated if the lambda changes.
Bug: 260343754
Test: ./gradlew :wear:compose:compose-material:connectedCheck --info --daemon
Relnote: "PlaceholderState.rememberPlaceholderState() updated to use rememberUpdatedState to that the state will update if the onContentReady lambda."
Change-Id: I02635c21c723a91aa2f5915fe79468a463fd1698
M wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialTest.kt
M wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt
M wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
M wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Placeholder.kt
M wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/PlaceholderDemo.kt
jn...@google.com <jn...@google.com>
na...@google.com <na...@google.com> #9
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.wear.compose:compose-material:1.2.0-alpha02
androidx.wear.compose:compose-material:1.1.1
na...@google.com <na...@google.com> #10
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.wear.compose:compose-material:1.4.0-rc01
Description
Version used: 1.1.0-rc01
Devices/Android versions reproduced on: Emulator / Android Studio Previews
Repro
Expected placeholder and content states
Actual final content state