Skip to content

Instantly share code, notes, and snippets.

View RikNorakomi's full-sized avatar

Rik van Velzen RikNorakomi

View GitHub Profile
@RikNorakomi
RikNorakomi / gist:b7e26d82623f9521512bd625624c8059
Created May 19, 2024 15:41
compose multiplatform dependency
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.compose.ui:ui")
}
...
}
@RikNorakomi
RikNorakomi / gist:bd71630af79fac058f56bb1409ad76df
Last active May 19, 2024 15:25
rememberScreenSizeInfo iOS and Android
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalWindowInfo
@OptIn(ExperimentalComposeUiApi::class)
@Composable
actual fun rememberScreenSizeInfo(): ScreenSizeInfo {
val density = LocalDensity.current
val config = LocalWindowInfo.current.containerSize
@RikNorakomi
RikNorakomi / gist:acd751e86554fbe24ef931fc4fab44ae
Created May 19, 2024 15:16
expect fun rememberScreenSizeInfo
@Composable
expect fun rememberScreenSizeInfo(): ScreenSizeInfo
@Composable
fun App() {
val screenSizeInfo = rememberScreenSizeInfo()
val uiType = screenSizeInfo.getUiType()
MaterialTheme {
when (uiType) {
UiType.COMPACT -> CompactUi()
UiType.MEDIUM -> MediumUi()
UiType.EXPANDED -> ExpandedUi()
fun ScreenSizeInfo.getUiType(): UiType {
return when (widthDp){
in 0.dp..600.dp -> UiType.COMPACT
in 600.dp..840.dp -> UiType.MEDIUM
else -> UiType.EXPANDED
}
}
enum class UiType {
COMPACT,
@Composable
fun rememberScreenSizeInfo(): ScreenSizeInfo {
val config = LocalConfiguration.current
return remember(config) {
ScreenSizeInfo(
heightDp = config.screenHeightDp.dp,
widthDp = config.screenWidthDp.dp
)
}
}
@RikNorakomi
RikNorakomi / gist:f70a42ac334c2a7b5533a555010a9d00
Created May 10, 2024 13:30
Implementation of a Voyager Screen interface
class SettingsOverviewScreen : Screen {
@Composable
override fun Content() {
val navigator = LocalNavigator.current
SettingsOverview(onNavigate = {
navigator?.push(SettingsDetailScreen())
})
}
}
@RikNorakomi
RikNorakomi / gist:d53e6744b54f55510230eee790d5292e
Created May 10, 2024 13:20
Implementation of a Tab object implementing Voyager's Tab interface
object SettingsTab : Tab {
override val options: TabOptions
@Composable
get() {
val title = stringResource(R.string.settings_tab)
val icon = rememberVectorPainter(Icons.Default.Settings)
return remember {
TabOptions(
@Composable
fun RowScope.TabNavigationItem(tab: Tab) {
val tabNavigator = LocalTabNavigator.current
BottomNavigationItem(
selected = tabNavigator.current == tab,
onClick = { tabNavigator.current = tab },
label = {
Text(text = tab.options.title)
},
@RikNorakomi
RikNorakomi / gist:e527ad28f1b8b45371d8e4dbcd0689f5
Created May 10, 2024 12:50
MainActivity Entry point composable
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MainContent()
}
}
}
@Composable