Skip to content

Commit

Permalink
fix white screen
Browse files Browse the repository at this point in the history
  • Loading branch information
stslex committed Sep 10, 2023
1 parent 6743df1 commit 7f5fde5
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 66 deletions.
2 changes: 0 additions & 2 deletions app/src/main/java/com/stslex93/notes/ui/NavigationHost.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.stslex93.notes.ui

import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.stslex93.notes.core.navigation.v2.compose.NavExtrasHost
Expand All @@ -14,7 +13,6 @@ fun NavigationHost(
navController: NavExtrasHostController,
modifier: Modifier = Modifier,
) {
Text(text = "text")
NavExtrasHost(
navController = navController,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.stslex93.notes.core.navigation.v2.compose

import android.os.Build
import android.os.Bundle
import android.os.Parcelable
import androidx.compose.runtime.Composable
import androidx.navigation.NamedNavArgument
import androidx.navigation.NavBackStackEntry
Expand All @@ -9,6 +11,7 @@ import androidx.navigation.NavGraphBuilder
import androidx.navigation.get
import com.stslex93.notes.core.navigation.v2.controller.ComposeNavigator
import com.stslex93.notes.core.navigation.v2.controller.Destination
import com.stslex93.notes.core.navigation.v2.screen.HostScreen

fun NavGraphBuilder.composable(
route: String,
Expand All @@ -28,3 +31,34 @@ fun NavGraphBuilder.composable(
}
)
}

inline fun <reified T : Parcelable> NavGraphBuilder.composable(
screen: HostScreen,
arguments: List<NamedNavArgument> = emptyList(),
deepLinks: List<NavDeepLink> = emptyList(),
crossinline content: @Composable (backStackEntry: NavBackStackEntry, arguments: T?) -> Unit
) {
composable(
route = screen.route,
arguments = arguments,
deepLinks = deepLinks,
) { backStackEntry, args ->
val data = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
args?.getParcelable(screen.key, T::class.java)
} else {
args?.getParcelable(screen.key)
}
content(backStackEntry, data)
}
}

inline fun <reified T : Parcelable> NavGraphBuilder.composable(
screen: HostScreen,
crossinline content: @Composable (data: T) -> Unit
) {
composable<T>(screen) { _, arguments ->
arguments?.let { data ->
content(data)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.stslex93.notes.core.navigation.v2.compose

import android.os.Bundle
import androidx.activity.compose.BackHandler
import androidx.activity.compose.LocalOnBackPressedDispatcherOwner
import androidx.compose.animation.Crossfade
import androidx.compose.runtime.Composable
Expand Down Expand Up @@ -36,7 +37,7 @@ fun NavExtrasHost(
builder: NavGraphBuilder.() -> Unit
) {
NavHost(
navController,
navController = navController,
remember(route, navController.startDestination.route, builder) {
navController.createGraph(navController.startDestination.route, route, builder)
},
Expand All @@ -60,11 +61,14 @@ fun NavHost(
// Setup the navController with proper owners
navController.setLifecycleOwner(lifecycleOwner)
navController.setViewModelStore(viewModelStoreOwner.viewModelStore)

if (onBackPressedDispatcher != null) {
navController.setOnBackPressedDispatcher(onBackPressedDispatcher)
}

// Ensure that the NavController only receives back events while
// the NavHost is in composition

DisposableEffect(navController) {
navController.enableOnBackPressed(true)
onDispose {
Expand Down Expand Up @@ -103,9 +107,9 @@ fun NavHost(
modifier = modifier,
label = "crossfadde"
) {
val lastEntry = visibleEntries.last { entry ->
val lastEntry = visibleEntries.lastOrNull { entry ->
it == entry.id
}
} ?: return@Crossfade
// We are disposing on a Unit as we only want to dispose when the CrossFade completes
DisposableEffect(Unit) {
if (initialCrossfade) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import androidx.navigation.NavOptions
import androidx.navigation.NavOptionsBuilder
import androidx.navigation.Navigator
import androidx.navigation.compose.DialogNavigator
import com.stslex93.notes.core.navigation.v2.screen.AppNavScreen
import com.stslex93.notes.core.navigation.v2.screen.Home
import com.stslex93.notes.core.ui.base.NavigationScreen
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
Expand Down Expand Up @@ -67,7 +67,7 @@ private fun createNavExtrasController(

@Composable
fun rememberNavExtrasController(
startDestination: NavigationScreen = AppNavScreen.Home,
startDestination: NavigationScreen = Home,
vararg navigators: Navigator<out NavDestination>
): NavExtrasHostController {
val context = LocalContext.current
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,37 @@
package com.stslex93.notes.core.navigation.v2.navigator

import androidx.navigation.NavOptions
import com.stslex93.notes.core.navigation.v2.controller.NavExtrasHostController
import com.stslex93.notes.core.ui.base.NavigationScreen
import com.stslex93.notes.core.ui.di.Navigator
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class NavigatorImpl @Inject constructor(
private val navController: NavExtrasHostController
) : Navigator {

override fun navigate(screen: NavigationScreen) {
navController.navigate(screen = screen) {
navController.currentDestination
?.route
?.takeIf { screen.isSingleTop }
?.let { currentRoute ->
popUpTo(currentRoute) {
inclusive = true

val options = navController.currentDestination
?.route
?.takeIf { screen.isSingleTop }
?.let { currentRoute ->
NavOptions.Builder().apply {
setPopUpTo(
route = currentRoute,
inclusive = true,
saveState = true
}
launchSingleTop = true
)
setLaunchSingleTop(true)
}
}
}?.build()

navController.navigate(
screen = screen,
navOptions = options
)
}

override fun popBackStack() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,22 @@ import com.stslex93.notes.core.navigation.v2.NoteEditArgs
import com.stslex93.notes.core.ui.base.NavigationScreen
import com.stslex93.notes.core.ui.base.saveBundle

sealed class AppNavScreen(
route: String,
extra: Extra? = null
) : NavigationScreen(route, extra.saveBundle) {
data object Home : NavigationScreen(HostScreen.HOME.route) {

data object Home : AppNavScreen(
HostScreen.HOME.route
) {
override val isSingleTop: Boolean = true
}
override val isSingleTop: Boolean = true
}

data class NoteEdit(
val noteEdit: NoteEditArgs
) : AppNavScreen(
route = HostScreen.NOTE_EDIT.route,
extra = Extra(HostScreen.NOTE_EDIT.key, noteEdit)
)
}
data class NoteEdit(
val noteEdit: NoteEditArgs
) : NavigationScreen(
route = HostScreen.NOTE_EDIT.route,
extra = Extra(HostScreen.NOTE_EDIT.key, noteEdit)
)

//sealed class AppNavScreen(
// route: String,
// extra: Extra? = null
//) : NavigationScreen(route, extra.saveBundle) {
//
//
//}
Original file line number Diff line number Diff line change
Expand Up @@ -11,43 +11,17 @@ import com.stslex93.notes.feature.edit.di.setupComponent
fun NavGraphBuilder.editGraph(
modifier: Modifier = Modifier,
) {
composable(HostScreen.NOTE_EDIT.route) { _, _ ->
// val arguments = noteEditArgs ?: NoteEditArgs(-1, false)
//
val viewModel = setupComponent("")
//
// LaunchedEffect(Unit) {
// viewModel.init(arguments)
// }
composable<NoteEditArgs>(HostScreen.NOTE_EDIT) { arguments ->

val viewModel = setupComponent(arguments.hashCode().toString())

LaunchedEffect(Unit) {
viewModel.init(arguments)
}

InitEditScreen(
modifier = modifier,
viewModel = viewModel
)
}
// composable(
// route = AppDestination.NOTE_EDIT.navigationRoute,
// arguments = AppDestination.NOTE_EDIT.composableArguments
// ) { navBackStackEntry ->
//
// val arguments = AppDestination.NOTE_EDIT
// .parseArguments(navBackStackEntry)
// .let { args ->
// AppArguments.NoteEdit(
// noteId = args[0].toIntOrNull() ?: -1,
// isEdit = args[1].toBooleanStrictOrNull() ?: false
// )
// }
//
// val viewModel = setupComponent(arguments.hashCode().toString())
//
// LaunchedEffect(Unit) {
// viewModel.init(arguments)
// }
//
// InitEditScreen(
// modifier = modifier,
// viewModel = viewModel
// )
// }
}

0 comments on commit 7f5fde5

Please sign in to comment.