rememberCoroutineScope – Coroutinen aus einem Klick in Jetpack Compose starten
LaunchedEffect ist super für Effekte beim Zusammenbau der UI – aber wie startest du eine Coroutine, wenn der Nutzer auf einen Button tippt? Dafür gibt es rememberCoroutineScope. Ich zeige den Unterschied und ein typisches Snackbar-Beispiel.
In Compose stolpern viele über eine simple Frage: Ich will beim Klick etwas Asynchrones tun – eine Snackbar zeigen, zu einer Listenposition scrollen, kurz warten. LaunchedEffect passt hier nicht, denn das läuft, wenn die UI zusammengebaut wird, nicht wenn jemand tippt. Die richtige Werkzeug heißt rememberCoroutineScope.
Der Unterschied in einem Satz
LaunchedEffect(key): startet eine Coroutine automatisch, gebunden an die Composition. Für „tue X, sobald dieser Screen erscheint / sichkeyändert".rememberCoroutineScope(): gibt dir einenCoroutineScope, aus dem du selbst in einem Callback (onClick,onValueChange…) eine Coroutine startest.
Beispiel: Snackbar aus einem Button
SnackbarHostState.showSnackbar ist eine suspend-Funktion – du kannst sie also nicht direkt in onClick aufrufen. Der Scope löst das:
@Composable
fun DemoScreen() {
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope() // an diese Composition gebunden
Scaffold(
snackbarHost = { SnackbarHost(snackbarHostState) }
) { padding ->
Button(
onClick = {
scope.launch {
snackbarHostState.showSnackbar("Gespeichert ✓")
}
},
modifier = Modifier.padding(padding)
) { Text("Speichern") }
}
}Der scope.launch { … } im onClick ist der Kern: Der Klick ist normaler Code, die Coroutine erledigt den suspend-Teil.
Warum nicht einfach ein eigener Scope?
Du könntest theoretisch CoroutineScope(Dispatchers.Main) selbst bauen – aber dann läuft die Coroutine weiter, auch wenn der Screen längst weg ist (Leak). rememberCoroutineScope ist an die Composition gebunden: Verschwindet das Composable, wird der Scope automatisch abgebrochen. Genau das willst du.
Faustregel
- Etwas soll automatisch bei Erscheinen/Änderung passieren →
LaunchedEffect. - Etwas soll als Reaktion auf eine Nutzeraktion passieren →
rememberCoroutineScope+scope.launch.
Wenn du eine Android-App mit sauberen, ruckelfreien Interaktionen in Compose brauchst, baue ich dir das – meld dich über bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
snapshotFlow in Jetpack Compose – aus Compose-Zustand einen Flow machen
Manchmal willst du auf einen Compose-Zustand reagieren wie auf einen Datenstrom – entprellen, kombinieren, sammeln. Genau das macht snapshotFlow. Ich zeige dir das an der häufigsten Aufgabe: mehr laden, wenn der Nutzer ans Listenende scrollt.
AnimatedVisibility in Jetpack Compose – ein- und ausblenden, das nicht springt
Ein Element einfach mit if wegzulassen, poppt hart weg. AnimatedVisibility blendet es weich ein und aus – mit sinnvollen Voreinstellungen und, wenn du willst, deiner eigenen Kombination aus Faden und Bewegung. Ich zeige dir beides.
callbackFlow – Listener-APIs in einen Flow verwandeln
Android steckt voller Callback-APIs mit `register`/`unregister`. Mit `callbackFlow` machst du daraus einen ganz normalen Flow – inklusive automatischem Abmelden, wenn niemand mehr zuhört.