eygraber
11/25/2025, 9:58 AMStylianos Gakis
11/25/2025, 1:23 PMorg.jetbrains.compose.resources.ResourcesExtension from my gradle convention plugin, but I can't seem to find the way to do this at the right time.
When doing:
project.pluginManager.apply("org.jetbrains.compose")
project.pluginManager.withPlugin("org.jetbrains.compose") {
// 1
project.configure<org.jetbrains.compose.resources.ResourcesExtension> {
// 2
}
}
I can see that I can get in //1 but not in //2.
I see that the resources extension is created after the ComposePlugin is applied https://github.com/JetBrains/compose-multiplatform/blob/1b40a6db80c9f97859ac56c088[…]/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt so I figured it should be available.
When using the generated DSL and doing this outside of my convention plugin (compose.resources { ... }) this works fine, so I am sure there is something I am doing wrong regarding the ordering of things. Or it's something else I don't understand.Jonas
11/27/2025, 4:46 PMnavigateUp to a composable which is implemented as backstack::removeLastOrNull . This function is being called when a certain state is collected from the ViewModel . When the function is called, it causes the composable to re-render twice which removes more screens from the backstack. When I remove the function call and replace it with a println it's only printed once. Can someone explain to me why removing a composable from the backstack causes it to rerender without any other state changes? Did someone experience the same?Pablo
11/28/2025, 1:17 PMuiState, then I use LaunchedEffect to pass it up to the parent, which also stores it. That duplicates state and breaks Single Source of Truth.
Example of my parent section receiving the pdf and storing it in it's own uistate to do actions with it:
composable(InfractionsDestinations.Pending.name) {
PendingScreen(
infractions = uiState.pendingInfractions,
onPDFDisplayRequested = { pdf -> vm.storePDFForDisplayingItAndOtherActions(pdf) }
)
}
Child ViewModel:
data class UiState(val loading: Boolean = false, val pdf: PDF? = null)
Child Composable:
LaunchedEffect(uiState.pdf) {
uiState.pdf?.let { onPDFDisplayRequested(it) }
}
👉 Question: What’s the recommended Compose/MVVM strategy to avoid duplicating the PDF in both child and parent state, while still letting each child generate it?Ali Khaleqi Yekta
11/30/2025, 11:54 AMAnkit Kumar
11/30/2025, 3:08 PMSerhii K
12/01/2025, 9:59 AM.verticalScroll(rememberScrollState()) - needs full text to remain visible.
Any ideas? See the video.swanti
12/01/2025, 12:33 PMColton Idle
12/01/2025, 8:13 PMText in material to be TitleLarge, what's the best way to do that?
Use ProvideTextStyle or a CompositionLocalProvider or something else at the top near my theme declaration?Erfannj En
12/03/2025, 6:25 AMapply { value = newValue } there is no problem.
@Composable
public fun <T> rememberUpdatedState(newValue: T): State<T> =
remember { mutableStateOf(newValue) }.apply { value = newValue }Rafs
12/03/2025, 10:23 AMScrollableTabRow is getting skipped by accessibility when talkback element type is set to controls. It get's selected however when the element type is set to containers. Is this expected behaviour?Kyant
12/03/2025, 11:39 AMdorche
12/03/2025, 3:43 PMTolriq
12/05/2025, 8:17 AMjava.lang.IllegalArgumentException: Can't represent a width of 0 and height of 4983405 in Constraints on a specific LazyColumn when it reaches a very very large number of lines. (See full stack trace below) Can someone see something in the stack that could point to what triggers this ? It seems tied to InstrinsicSize but I'm not sure how to find what and if there's a workaround for this.ebtokyo
12/05/2025, 11:28 AMpainterResource(Res.drawable.test).
Now if I do Res.getUri("files/test.txt") or Res.readBytes("files/test.txt") I'm getting this error:
java.lang.IllegalStateException: Android context is not initialized. If it happens in the Preview mode then call PreviewContextConfigurationEffect() function.
Is it a limitation from compose resources, no file loading from common code?andrew
12/05/2025, 8:34 PMursus
12/05/2025, 11:35 PMOffset in the debugger? It's giving me the long, and I only see the x,y components after I evaluate the expression, which is super annoyingKyant
12/06/2025, 2:41 AMGenericShape, click listener won't work after scroll to a certain position, which is a very urgent bug, and it has been there for a long time. Code is in🧵ebtokyo
12/06/2025, 3:21 AMException in thread "main" kotlin.NotImplementedError: Implemented only in JetBrains fork.
Please use `org.jetbrains.compose.ui:ui-util` package instead.Ameer Amjed
12/06/2025, 8:19 AMsetMultiSession(true) is required.
However, on the TV box, this is causing resource limitations and some lag.
When setMultiSession(false) is disabled, the stream stops completely.
Do you have any suggestions?Olivier Patry
12/06/2025, 12:49 PMNavKey subclass specific properties.
Say I have MyAppNavKey which extends NavKey and this interface defines a property to be implemented by final routes/NavKey.
The idea would be to define the transition spec at NavDisplay level, based on targetState or initialState, and MyAppNavKey.someProperty, I could take the decision of which transition to apply.
The issue I have is that I can't access NavEntry.key which is private, but this is the object I'd need to take the decision.
ContentKey is a string I can't rely on.
Ideally, I don't want to impact any entry<Foo> call sites of the entryProvider {}, everything should be statically declared in each route.
data object MyFinalRoute(override val someProperty: Boolean) : MyAppNavKeyursus
12/06/2025, 5:57 PMclass Particles(
val positions: Array<androidx.compose.ui.geometry.Offset>,
val velocities: Array<androidx.compose.ui.geometry.Offset>
)
For educational purposes, I tried a SoA of Offsets, but looking at byte code it autoboxes, so no performance gains.
Is there a way to convince the compiler to give me LongArray under the hood? (The type is convenient, ideally I'd not like to lose it)purezen
12/07/2025, 3:23 PMAdrian
12/07/2025, 8:43 PMRey (Kingg22)
12/07/2025, 10:16 PMHaniFakhouri
12/08/2025, 4:49 PMNavDisplay(sceneStrategy = bottomSheetStrategy)
and another example of dialog scene strategy:
NavDisplay(sceneStrategy = dialogStrategy)
But what if I want to display one entry as a dialog and another entry as a bottom sheet? I mean NavDisplay does take in several scene strategies.Alex Styl
12/09/2025, 11:25 AM./gradlew run when i add the hot reload plugin i get:
e: Unsupported plugin option: androidx.compose.compiler.plugins.kotlin:generateFunctionKeyMetaAnnotations=true
when i remove the hot reload plugin, i can run the jvm target w/o a problem
cc @Sebastian Sellmair [JB] @zsmbfal
12/09/2025, 6:30 PMprivate val composeTestRule: ComposeTestRule = createEmptyComposeRule()
// and then I launch my starting activity like:
ActivityScenario.launch<T>(startActivityIntent)
We of course need ComposeTestRule to be able to match semantics as it is SemanticsNodeInteractionsProvider . This is fine, but sometimes I will need to either manually advance the composeTestRule.mainClock or use functions like composeTestRule.waitUntil which under the hood advances the clock (if autoAdvance is true). If I don't do this and I have things like the following in my screen:
LaunchedEffect(Unit) {
delay(1000)
onEvent(ScreenEvent.CloseThis)
}
it will completely freeze the app and fail assertions. This level of control is great for precise UI tests where I want to specifically care about this, but from the perspective of an E2E test ideally I'd like to not care about this. It's the same when it comes to infinite animations and needing workarounds like withInfiniteAnimationFrameNanos . It feels like I should be able to not care if I don't want to. It seems like if I want to make E2E tests, I should instead do them through UiAutomator2 (which indeed is more black-box), but that has so many tradeoffs on speed and reliability that I feel like there should be a middle-ground no? Maybe I'm just super off-base here, so really curious on any opinions here, thanks!dorche
12/10/2025, 9:50 AMonAppear which runs on navigating to and back to a screen but does not run on background and foregrounding the app...Stylianos Gakis
12/10/2025, 11:24 AMPredictiveBackHandler in the CMP sources here, they mention that one should "Use NavigationEventHandler instead".
However I do not see a way to setup that in a CMP context while still being able to get a hold of the progress percentage of the predictive back etc.
What is it that I am missing here?