Fixed navigation.

P.S. Ugly fix, will change later.
This commit is contained in:
Sad Ellie 2023-01-13 21:10:40 +04:00
parent c72316acf1
commit a8cbb8f89e
3 changed files with 41 additions and 70 deletions

View File

@ -19,8 +19,10 @@
package com.sadellie.unitto
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.sadellie.unitto.feature.converter.MainViewModel
import com.sadellie.unitto.feature.converter.navigation.converterRoute
import com.sadellie.unitto.feature.converter.navigation.converterScreen
@ -28,11 +30,13 @@ import com.sadellie.unitto.feature.settings.SettingsViewModel
import com.sadellie.unitto.feature.settings.navigation.navigateToSettings
import com.sadellie.unitto.feature.settings.navigation.navigateToUnitGroups
import com.sadellie.unitto.feature.settings.navigation.settingGraph
import com.sadellie.unitto.feature.unitslist.LeftSideScreen
import com.sadellie.unitto.feature.unitslist.RightSideScreen
import com.sadellie.unitto.feature.unitslist.SecondViewModel
import com.sadellie.unitto.feature.unitslist.navigation.leftSideScreen
import com.sadellie.unitto.feature.unitslist.navigation.leftSideRoute
import com.sadellie.unitto.feature.unitslist.navigation.navigateToLeftSide
import com.sadellie.unitto.feature.unitslist.navigation.navigateToRightSide
import com.sadellie.unitto.feature.unitslist.navigation.rightSideScreen
import com.sadellie.unitto.feature.unitslist.navigation.rightSideRoute
import io.github.sadellie.themmo.ThemmoController
@Composable
@ -54,23 +58,41 @@ fun UnittoNavigation(
viewModel = mainViewModel
)
leftSideScreen(
secondViewModel = secondViewModel,
unitFrom = mainViewModel.uiStateFlow.value.unitFrom ?: return@NavHost,
navigateUp = { navController.navigateUp() },
navigateToUnitGroups = { navController.navigateToUnitGroups() },
onSelectAction = { mainViewModel.updateUnitFrom(it) }
)
composable(leftSideRoute) {
// Don't do this in your app
val mainUiState = mainViewModel.uiStateFlow.collectAsState()
val unitFrom = mainUiState.value.unitFrom ?: return@composable
// Initial group
secondViewModel.setSelectedChip(unitFrom.group, true)
rightSideScreen(
secondViewModel = secondViewModel,
unitFrom = mainViewModel.uiStateFlow.value.unitFrom ?: return@NavHost,
unitTo = mainViewModel.uiStateFlow.value.unitTo ?: return@NavHost,
inputValue = mainViewModel.getInputValue(),
navigateUp = { navController.navigateUp() },
navigateToUnitGroups = { navController.navigateToUnitGroups() },
onSelectAction = { mainViewModel.updateUnitTo(it) }
)
LeftSideScreen(
viewModel = secondViewModel,
currentUnit = unitFrom,
navigateUp = { navController.navigateUp() },
navigateToSettingsAction = { navController.navigateToUnitGroups() },
selectAction = { mainViewModel.updateUnitFrom(it) }
)
}
composable(rightSideRoute) {
// Don't do this in your app
val mainUiState = mainViewModel.uiStateFlow.collectAsState()
val unitFrom = mainUiState.value.unitFrom ?: return@composable
val unitTo = mainUiState.value.unitTo ?: return@composable
// Initial group
secondViewModel.setSelectedChip(unitFrom.group, false)
RightSideScreen(
viewModel = secondViewModel,
currentUnit = unitTo,
navigateUp = { navController.navigateUp() },
navigateToSettingsAction = { navController.navigateToUnitGroups() },
selectAction = { mainViewModel.updateUnitTo(it) },
inputValue = mainViewModel.getInputValue(),
unitFrom = unitFrom
)
}
settingGraph(
settingsViewModel = settingsViewModel,

View File

@ -52,7 +52,7 @@ fun UnitSelectionButton(
) {
Button(
modifier = modifier,
onClick = { onClick() },
onClick = onClick,
enabled = label != null,
colors = ButtonDefaults.buttonColors(
containerColor = MaterialTheme.colorScheme.primaryContainer

View File

@ -19,12 +19,6 @@
package com.sadellie.unitto.feature.unitslist.navigation
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.feature.unitslist.LeftSideScreen
import com.sadellie.unitto.feature.unitslist.RightSideScreen
import com.sadellie.unitto.feature.unitslist.SecondViewModel
const val leftSideRoute = "left_side_route"
const val rightSideRoute = "right_side_route"
@ -36,48 +30,3 @@ fun NavController.navigateToLeftSide() {
fun NavController.navigateToRightSide() {
navigate(rightSideRoute)
}
fun NavGraphBuilder.leftSideScreen(
secondViewModel: SecondViewModel,
unitFrom: AbstractUnit,
navigateUp: () -> Unit,
navigateToUnitGroups: () -> Unit,
onSelectAction: (AbstractUnit) -> Unit,
) {
composable(leftSideRoute) {
secondViewModel.setSelectedChip(unitFrom.group, true)
LeftSideScreen(
viewModel = secondViewModel,
currentUnit = unitFrom,
navigateUp = navigateUp,
navigateToSettingsAction = navigateToUnitGroups,
selectAction = onSelectAction
)
}
}
fun NavGraphBuilder.rightSideScreen(
secondViewModel: SecondViewModel,
unitFrom: AbstractUnit,
unitTo: AbstractUnit,
inputValue: String,
navigateUp: () -> Unit,
navigateToUnitGroups: () -> Unit,
onSelectAction: (AbstractUnit) -> Unit
) {
composable(rightSideRoute) {
// Initial group
secondViewModel.setSelectedChip(unitFrom.group, false)
RightSideScreen(
viewModel = secondViewModel,
currentUnit = unitTo,
navigateUp = navigateUp,
navigateToSettingsAction = navigateToUnitGroups,
selectAction = onSelectAction,
inputValue = inputValue,
unitFrom = unitFrom,
)
}
}