-
Notifications
You must be signed in to change notification settings - Fork 17
/
MultiScreen.kt
46 lines (38 loc) · 1.57 KB
/
MultiScreen.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.github.terrakok.modo.multiscreen
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ProvidableCompositionLocal
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.Modifier
import com.github.terrakok.modo.ContainerScreen
import com.github.terrakok.modo.RendererContent
import com.github.terrakok.modo.Screen
import com.github.terrakok.modo.defaultRendererContent
val LocalMultiScreenNavigation: ProvidableCompositionLocal<MultiScreenNavContainer> = staticCompositionLocalOf {
error("There is no MultiScreenContainer in hierarchy, or maybe you override provideCompositionLocal and forgot to call supper.")
}
abstract class MultiScreen(
navigationModel: MultiScreenNavModel
) : ContainerScreen<MultiScreenState, MultiScreenAction>(navigationModel), MultiScreenNavContainer {
@Composable
override fun Content(modifier: Modifier) {
SelectedScreen()
}
override fun provideNavigationContainer() = LocalMultiScreenNavigation provides this
@Composable
fun SelectedScreen(
modifier: Modifier = Modifier,
content: RendererContent<MultiScreenState> = defaultRendererContent
) {
val (screens, selectedPos) = navigationState
Content(screens[selectedPos], modifier, content)
}
@Composable
fun Content(
screen: Screen,
modifier: Modifier = Modifier,
content: RendererContent<MultiScreenState> = defaultRendererContent
) {
// report issue to google issue tracker
super.InternalContent(screen, modifier, content)
}
}