Status Update
Comments
il...@google.com <il...@google.com> #2
Oh I forgot to mention that I thought it might be connected to this issue:
yu...@gmail.com <yu...@gmail.com> #3
Please provide a minimal sample project along with the minimal steps to recreate the issue in the project.
il...@google.com <il...@google.com>
m....@futuremind.com <m....@futuremind.com> #4
Sorry for the delay. I got a working example here:
I poked into it a little bit and it seems to be connected to
Steps to reproduce:
- Navigate from Second Fragment to Child nav graph (with non-nullable parameters).
- Navigate to Third fragment using SafeArgs and the app crashes.
Crash log:
Process: cz.dels.issues, PID: 1743
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Long
at androidx.navigation.NavType$Companion$LongType$1.get(NavType.kt:352)
at androidx.navigation.NavType$Companion$LongType$1.get(NavType.kt:342)
at androidx.navigation.NavArgument.verify(NavArgument.kt:76)
at androidx.navigation.NavDestination.addInDefaultArgs(NavDestination.kt:502)
at androidx.navigation.NavController.addEntryToBackStack(NavController.kt:1865)
at androidx.navigation.NavController.addEntryToBackStack$default(NavController.kt:1813)
at androidx.navigation.NavController$navigate$4.invoke(NavController.kt:1721)
at androidx.navigation.NavController$navigate$4.invoke(NavController.kt:1719)
at androidx.navigation.NavController$NavControllerNavigatorState.push(NavController.kt:287)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.kt:246)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.kt:162)
at androidx.navigation.NavController.navigateInternal(NavController.kt:260)
at androidx.navigation.NavController.navigate(NavController.kt:1719)
at androidx.navigation.NavController.navigate(NavController.kt:1545)
at androidx.navigation.NavController.navigate(NavController.kt:1472)
at androidx.navigation.NavController.navigate(NavController.kt:1930)
at cz.dels.issues.SecondFragment.onViewCreated$lambda-0(SecondFragment.kt:38)
at cz.dels.issues.SecondFragment.$r8$lambda$XDYnOS_cYrafiNQ5rcCu1WCn0IE(Unknown Source:0)
at cz.dels.issues.SecondFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
Note: If in step 2 SaveArgs is not used then navigation works correctly. More information is here:
co...@protonmail.com <co...@protonmail.com> #5
Ups a typo: Navigate from Second First Fragment to Child nav graph (with non-nullable parameters).
Note: sorry for the spam but I am not able to edit my own comment.
ap...@google.com <ap...@google.com> #6
This has been fixed and will be available in navigation 2.6.0-alpha08
jb...@google.com <jb...@google.com> #7
Branch: androidx-main
commit 6b358154b794a0456b089ac8e548bfb830dd6c22
Author: Clara Fok <clarafok@google.com>
Date: Tue Mar 14 17:56:12 2023
Fix missing non-nullable arg when rebuilding hierarchy
When navigating with NavDirections, args is populated with an empty bundle. This causes issue when we rebuild parent hierarchy while adding a new entry to NavBackStack. If the Entry being rebuilt contains a non-nullalbe arg, i.e. Long, this empty bundle will cause an exception.
Test: ./gradlew navigation:navigation-runtime:cC
Bug: 249988437
Change-Id: I5c8ce739ad9a3428c8a8de13eae391bfff0db5df
M navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
M navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
yu...@gmail.com <yu...@gmail.com> #8
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-runtime:2.6.0-alpha08
yu...@gmail.com <yu...@gmail.com> #9
So I debugged more using the sample I previously provided and it seems like it's related to this, although it only happens when using flowWithLifecycle as described here:
Attaching the sample that shows the problems and the video.
In sample view model, there is simple flow that emits text in some interval.
In 2.4.0-alpha04 - Collecting flow directly via collectAsState or via rememberFlowWithLifecycle works as expected (interval Flow doesn't complete until the user leaves the screen)
In 2.4.0-alpha05-06 - Screen becomes empty tab reselection
In Snapshot #7634339:
- Tab reselection doesn't cause empty screens.
- Tab reselection doesn't cause early flow completion when collecting interval flow directly via collectAsState
- Tab reselection does cause early flow completion when collecting interval flow wrapped rememberFlowWithLifecycle (as show in attached video)
ro...@gmail.com <ro...@gmail.com> #10
mi...@gmail.com <mi...@gmail.com> #11
so...@gmail.com <so...@gmail.com> #12
jb...@google.com <jb...@google.com> #13
Please file a new bug with a minimal sample project that reproduces this issue.
mi...@gmail.com <mi...@gmail.com> #14
de...@gmail.com <de...@gmail.com> #15
Additionally, I attached two videos. One using Navigation 2.6.0 shows it is working fine, while the other video using Navigation 2.7.1 shows the strange behavior of a blank flash.
I tested all 2.7.x versions and the 2.8.0 alpha, and it's still happening.
Additionally, in some cases, the transition of the screens is that it enters from the upper right corner to the lower left. This behavior is bizarre and erratic since there is no defined animation, and it happens randomly on the screen. Only when many buttons on the screens are pressed quickly.
Feel free to tag me if there is any advance :(. (I am new here, IDK how this works)
yu...@gmail.com <yu...@gmail.com> #16
ja...@gmail.com <ja...@gmail.com> #17
if (navController.previousBackStackEntry != null) {
navController.popBackStack()
}
ja...@gmail.com <ja...@gmail.com> #18
onClick = {
if (selectedItemIndex != index) {
localNavController.navigate(
route = item.route,
builder = {
launchSingleTop = true
restoreState = true
popUpTo(localNavController.graph.startDestinationId) {
saveState = true
}
}
)
}
}
Description
Component used: Navigation Compose
Version used: androidx.navigation:navigation-compose:2.4.0-alpha05
Devices/Android versions reproduced on: Android 12 beta
Problem: When re-selecting the same tab (i.e clicking already selected tab), the screen becomes empty. It doesn't happen when current destination is the root graph's startDestination.
I first noticed this on my app, then confirmed it by trying it on github.com/chrisbanes/tivi and upgrading nav compose to 2.4.0-alpha05.