我有一个FirebaseMessagingService子类,它接收通知负载,然后创建一个具有以下挂起内容的推送通知:
TaskStackBuilder.create(this).run {
addNextIntentWithParentStack(
Intent(
Intent.ACTION_VIEW,
"eway://traversals_monthly_bill_details".toUri()
)
)
getPendingIntent(2345, PendingIntent.FLAG_UPDATE_CURRENT)
}
以下是我们导航的各个嵌套图的组合:
composable(Screens.INTERMEDIATE_MONTHLY_BILLINGS.navRoute,
deepLinks =
listOf(
navDeepLink {
uriPattern =
"eway://traversals_monthly_bill_details"
}
)) {
IntermediateMonthlyBillings({ statements ->
val lastIndex = statements.lastIndex
val gson = GsonBuilder().create()
val statementsByYearJson = gson.toJson(statements)
navController.navigate("${Screens.MONTHLY_BILLINGS}/$statementsByYearJson/$lastIndex")
})
}
composable("${Screens.MONTHLY_BILLINGS.navRoute}/{statementsByYear}/{initialIndex}",
arguments = listOf(
navArgument("statementsByYear") {},
navArgument("initialIndex") {
type = NavType.IntType
}
)
) {
val gson = GsonBuilder().create()
val statementsByYear = gson.fromJson(
it.arguments?.getString("statementsByYear"),
AllStatementsByYear::class.java
)
MonthlyBillings(statementsByYear, it.arguments?.getInt("initialIndex")!!)
updateCurrentScreen(Screens.MONTHLY_BILLINGS)
}
这是中间屏幕:
@Composable
fun IntermediateMonthlyBillings(
onDataAcquired: (AllStatementsByYear) -> Unit,
myEwayLoggedInViewModel: MyEwayLoggedInViewModel = get()
) {
val statementsByYear by myEwayLoggedInViewModel.statementsByYear.observeAsState(null)
if (statementsByYear == null) {
GenericLoader(type = MyLoaderType.LIGHT_BACKGROUND)
}
LaunchedEffect(statementsByYear == null) {
if (statementsByYear != null) {
onDataAcquired(statementsByYear!!)
}
}
}
问题是,虽然深度链接可以工作,我被导航到中间屏幕,并在收到数据后运行回调onDataAcquired
(然后将我导航到MonthlyBillings屏幕),但它看起来似乎充满了MonthlyBillings或中间屏幕的实例,我不知道为什么.
在我到达deeplink的目的地后,我需要发送"后退"按钮的垃圾邮件,在大约10次try 后,它将开始将我导航回原始堆栈.
我实际上想要的是,堆栈只有最终的目标屏幕(MonthlyBillings)以及一系列Backback条目,如果用户手动导航(例如ScreenA、ScreenC、ScreenF、MonthlyBillings).