Compose code -- From Deep route if Rapidly clicking back button then white screen is showing - what can be the root cause?

18 hours ago 2
ARTICLE AD BOX

this is my code where i am perform navigation with Navhost controller in compose , when whenever i am in deep of this nav route and from there if i rapidly click back button then it is showing white screen, after adding log or debugging also it is not getting identify give me solution for this

@AndroidEntryPoint
class ShiftActivity : ComponentActivity() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val defaultTab = intent.getStringExtra("tab")
val startDestination = when (defaultTab?.lowercase()) {
"attendance", "attendance_logs" -> "attendance"
else -> "shiftList"
}

setContent {
MaterialTheme {
// Remove outer Scaffold - single responsibility
Surface(color = MaterialTheme.colors.background) {
ShiftNavHost(hiltViewModel(), startDestination = startDestination, onClose ={ finish() })
}
}
}
}
}
// NavHost code

@RequiresApi(Build.VERSION_CODES.O)
@Composable
fun ShiftNavHost(viewModel: ShiftViewModel, startDestination: String, onClose : () -> Unit) {
val stableStart = remember { startDestination }
val navController = rememberNavController()

NavHost(
navController = navController,
startDestination = stableStart
) {
composable("shiftList") {
ShiftScreen(
viewModel = viewModel,
onCardClick = { card ->
val id = card.id
val name = card.name
if (id != null && id.toString().isNotEmpty()) {
navController.navigate("shiftPerson/$id/$name")
}
},
onAddClick = {
navController.navigate("createShift")
}
)
}

composable("shiftPerson/{id}/{name}") { backStackEntry ->
val id = backStackEntry.arguments?.getString("id")
val name = backStackEntry.arguments?.getString("name")
if (id != null) {
ShiftPersonScreen(id, shiftName = name,viewModel,navController)
}
}

composable("shiftAssignment/{shiftAssignId}/{shiftHelperId}") { backStackEntry ->
val shiftAssignId = backStackEntry.arguments?.getString("shiftAssignId")
val shiftHelperId = backStackEntry.arguments?.getString("shiftHelperId")
if (shiftAssignId != null) {
ShiftAssigneeDetailsScreen(
viewModel = viewModel,
onBackClick = { navController.popBackStack() },
shiftAssignId = shiftAssignId,
helperId = shiftHelperId,
)
}
}

composable("attendance") { backStackEntry ->
ShiftAttendanceListScreen(hiltViewModel(), onCardClick = {
val id = it.id
val name = it.name
if (id != null && id.toString().isNotEmpty()) {
navController.navigate("shiftPerson/$id/$name")
}
}, onBackClick = onClose)
}

composable("createShift") {
CreateShiftScreen(
viewModel = viewModel,
navController = navController,
onCancel = { navController.popBackStack() },
onCreateShift = { request ->
viewModel.createShift(request)
}
)
}

composable("availableHelpers/{shiftId}") { backStackEntry ->
val shiftId = backStackEntry.arguments?.getString("shiftId")
ShiftAvailableHelperScreen(
viewModel = viewModel,
navController = navController,
shiftId = shiftId ?: ""
)
}
}
}

Read Entire Article