Skip to content

Instantly share code, notes, and snippets.

@Composable
fun Content(backPress: Backpress) {
// ...
}
@Composable
fun Content(backPress: Backpress) {
var backStack by +state<BackStack<Routing>> { BackStack(Routing.AlbumList) }
if (backPress.triggered) {
backStack = backStack.pop()
backPress.triggered = false
}
// remainder omitted
A [back stack of 1 element]
└── B [back stack of 2 elements]
└── C [back stack of 4 elements]
└── D [back stack of 1 element]
└── ...
A [back stack of 1 element]
└── B [back stack of 1 element]
└── C [back stack of 1 element]
└── D [back stack of 1 element]
└── ...
@Composable
fun SomeParent(backPress: Backpress, cantPopBackStack: () -> Unit) {
var backStack by +state<BackStack<Routing>> { BackStack(Routing.Hello) }
if (backPress.triggered) {
if (!backStack.pop()) {
cantPopBackStack()
}
backPress.triggered = false
}
@Composable
fun Content(backPress: Backpress, cantPopBackStack: () -> Unit) {
// remainder omitted
SomeChild.Content(
backPress = backPress
// SomeChild’s fallback will be:
cantPopBackStack = {
// This is parent’s back stack
@Composable
fun Content(backPress: Backpress, cantPopBackStack: () -> Unit) {
if (backPress.triggered) {
cantPopBackStack()
}
}
@Composable
fun Content(backPress: Backpress, cantPopBackStack: () -> Unit) {
// remainder omitted
SomeChild1.Content(
backPress = backPress,
cantPopBackStack = {
if (!backStack.pop()) {
cantPopBackStack()
@Composable
fun Content(backPress: Backpress, cantPopBackStack: () -> Unit) {
// remainder omitted
var unhandledCount = +memo { State(0) }
val nbChildren = 2
val cantPopBackStackDelegate = {
// if we tried all of them and failed...
if (++unhandledCount.value == nbChildren) {
A [Ambient provided with value: X]
└── B ...
└── C ...
└── D ...
└── E [Ambient read: X]