Базовая навигация
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package com.github.nullptroma.wallenc.presentation
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import androidx.navigation.toRoute
|
||||
import com.github.nullptroma.wallenc.presentation.screens.main.MainRoute
|
||||
import com.github.nullptroma.wallenc.presentation.screens.main.MainScreen
|
||||
import com.github.nullptroma.wallenc.presentation.screens.settings.SettingsRoute
|
||||
import com.github.nullptroma.wallenc.presentation.screens.settings.SettingsScreen
|
||||
import com.github.nullptroma.wallenc.presentation.theme.WallencTheme
|
||||
|
||||
|
||||
@Composable
|
||||
fun WallencUi() {
|
||||
WallencTheme {
|
||||
Surface {
|
||||
WallencNavRoot()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun WallencNavRoot() {
|
||||
val navController = rememberNavController()
|
||||
Scaffold { innerPaddings ->
|
||||
NavHost(navController, startDestination = MainRoute()) {
|
||||
composable<MainRoute> {
|
||||
MainScreen(Modifier.padding(innerPaddings), onSettingsRoute = { settingsRoute ->
|
||||
navController.navigate(settingsRoute)
|
||||
})
|
||||
}
|
||||
composable<SettingsRoute> {
|
||||
val route: SettingsRoute = it.toRoute()
|
||||
SettingsScreen(Modifier.padding(innerPaddings), route.text)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.github.nullptroma.wallenc.presentation.extensions
|
||||
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.layout
|
||||
import androidx.compose.ui.unit.Dp
|
||||
|
||||
fun Modifier.ignoreHorizontalParentPadding(horizontal: Dp): Modifier {
|
||||
return this.layout { measurable, constraints ->
|
||||
val overrideWidth = constraints.maxWidth + 2 * horizontal.roundToPx()
|
||||
val placeable = measurable.measure(constraints.copy(maxWidth = overrideWidth))
|
||||
layout(placeable.width, placeable.height) {
|
||||
placeable.place(0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Modifier.ignoreVerticalParentPadding(vertical: Dp): Modifier {
|
||||
return this.layout { measurable, constraints ->
|
||||
val overrideHeight = constraints.maxHeight + 2 * vertical.roundToPx()
|
||||
val placeable = measurable.measure(constraints.copy(maxHeight = overrideHeight))
|
||||
layout(placeable.width, placeable.height) {
|
||||
placeable.place(0, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.github.nullptroma.wallenc.presentation.screens.main
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable class MainRoute
|
||||
@@ -1,29 +1,36 @@
|
||||
package com.github.nullptroma.wallenc.presentation.screens.main
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import com.github.nullptroma.wallenc.presentation.screens.settings.SettingsRoute
|
||||
|
||||
|
||||
@androidx.compose.runtime.Composable
|
||||
fun MainScreen(modifier: Modifier = Modifier.Companion, viewModel: MainViewModel = hiltViewModel()) {
|
||||
fun MainScreen(modifier: Modifier = Modifier,
|
||||
viewModel: MainViewModel = hiltViewModel(),
|
||||
onSettingsRoute: (SettingsRoute) -> Unit) {
|
||||
val state = viewModel.stateFlow
|
||||
Column(modifier = modifier.imePadding()) {
|
||||
|
||||
Text(text = state.value)
|
||||
Box(
|
||||
modifier = Modifier.Companion.fillMaxSize(),
|
||||
contentAlignment = Alignment.Companion.BottomCenter
|
||||
) {
|
||||
TextField("", onValueChange = {
|
||||
|
||||
})
|
||||
var text by remember { mutableStateOf("") }
|
||||
Column(modifier = modifier.imePadding().fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) {
|
||||
TextField(text, onValueChange = { s ->
|
||||
text = s
|
||||
})
|
||||
Button( onClick = {
|
||||
onSettingsRoute(SettingsRoute(text))
|
||||
}) {
|
||||
Text("Press Me!")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.github.nullptroma.wallenc.presentation.screens.settings
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable class SettingsRoute(val text: String)
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.github.nullptroma.wallenc.presentation.screens.settings
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.github.nullptroma.wallenc.presentation.R
|
||||
|
||||
@Composable
|
||||
fun SettingsScreen(modifier: Modifier, text: String) {
|
||||
Column (modifier = modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) {
|
||||
Text(text = stringResource(id = R.string.settings_title))
|
||||
Text(text = text)
|
||||
}
|
||||
}
|
||||
4
presentation/src/main/res/values/strings.xml
Normal file
4
presentation/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="settings_title">Settings Screen Title!</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user