标签: jetpack-compose-navigation

无法使用导航和喷气背包组合弹出起始目的地

我在 Android 上使用最新版本的导航和撰写,但遇到一个错误,无法弹出导航的起始目的地。问题是,如果我有 3 个目的地(A、B、C)并从 A-> B -> C,我无法从后退堆栈中弹出 A,但当我调用时会弹出 B,导致后退popUpTo(B) inclusive = true按钮回到A。

我的代码:

导航主机

setContent {

        val navController = rememberNavController()

        NavHost(
            navController = navController,
            startDestination = "route_to_a"
        ) {

            composable("route_to_a") {
                LoginScreen(navController)
            }

            composable("route_to_b") {
                RegisterScreen(navController)
            }

            composable("route_to_c") {
                HomeScreen(navController = navController)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

导航

- A 到 B

Button(onClick = { navController.navigate("route_to_b")}) {}
Run Code Online (Sandbox Code Playgroud)

- B 到 C

Button(onClick = {
    navController.navigate("route_to_c") {
        popUpTo("route_to_b") {
            inclusive = true
        }
    }
}) {}
Run Code Online (Sandbox Code Playgroud)

我想创建一个流程,其中 A 和 …

android android-layout android-jetpack-navigation android-jetpack-compose jetpack-compose-navigation

2
推荐指数
1
解决办法
2781
查看次数

Jetpack 编写如何集中 navController 并注入它

目前,我NavGraphs的应用程序中有两个,一个用于身份验证路由,例如登录和注册,另一个用于登录时的家庭路由。
当前,当我想使用它时,我需要navController在每个可组合项中将其作为参数传递。这绝对是不可扩展的,所以我想知道是否可以使其可注入,以便我可以通过 DI 框架(如Koin. 我目前正在Koin我的应用程序中使用,所以如果我可以使用它的依赖注入工具,将 anavController作为singleton.

当前导航设置

我目前在navController内部创建MainActifity

class MainActivity : AppCompatActivity() {
    private lateinit var navController: NavHostController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        startKoin {
            androidLogger(if (BuildConfig.DEBUG) Level.ERROR else Level.NONE)
            androidContext(this@MainActivity)
            modules(listOf(networkModule, viewModelModule, interactorsModule))
        }

        setContent {
            navController = rememberAnimatedNavController()
            SetupNavGraph(navController = navController)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将它传递到NavHost保存两个的NavGraphs

fun SetupNavGraph(
    navController: NavHostController
) {
    AnimatedNavHost(
        navController = navController,
        startDestination = …
Run Code Online (Sandbox Code Playgroud)

kotlin koin android-jetpack-compose jetpack-compose-navigation

1
推荐指数
1
解决办法
3888
查看次数

如何使用 Jetpack Compose 从单个目的地导航到多个目的地

总之,我想根据单击的项目导航到目的地。

在此输入图像描述

但问题是我创建这些项目的方式,这是我不知道如何隔离项目并为它们提供 onClick 函数的方式。

附言。我使用数据类和对象函数来制作项目;

data class MenuData(
    Val id: Int,
    Val title: String,
    val menuImageId: Int = 0
)
Run Code Online (Sandbox Code Playgroud)
object MenuModel {

    .....

    fun menuModelList(context: Context) = listOf(

        MenuData(
            id = 1,
            title = context.getString(R.string.menu_log),
            description = context.getString(R.string.menu_logText),
            menuImageId = R.drawable.menu_log
        ),
      .....
    )
}
Run Code Online (Sandbox Code Playgroud)


通常我所做的导航是(示例代码):

@Composable
fun WaysCard(
    waysInfo: WaysData,
    onWaysCardClick: (Int) -> Unit,
    modifier: Modifier = Modifier
) {
    Surface(
        shape = MaterialTheme.shapes.small,
        elevation = 10.dp,
        modifier = modifier
            .clickable { onWaysCardClick(waysInfo.id) }
    ) 
    ....
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我为可组合项提供了一个单击函数,并将数据类作为参数传递,因为通常这些项目是通用的,它们的大部分内容都以类似的方式排列。 …

android kotlin android-jetpack-navigation android-jetpack-compose jetpack-compose-navigation

1
推荐指数
1
解决办法
288
查看次数

如何在 Jetpack Compose 中获取 NavDeepLink 的完整 uriPattern?

我有一个使用应在应用程序中打开的联合 URL 的应用程序。它使用 DeepLinks 来做到这一点。

问题是我需要向可组合项提供完整的 URI 模式,以便找出从哪里获取数据。我如何提供可组合项的完整 URL?

例子:

composable(
  route = "c/{name}/{instance}",
  deepLinks = DEFAULT_LEMMY_INSTANCES.map { instance ->
    navDeepLink { uriPattern = "$instance/c/{name}" }
  },
  arguments = listOf(
    navArgument("name") {
      type = NavType.StringType
    }
  )
) {
  LaunchedEffect(Unit) {
  val name = it.arguments?.getString("name")!!
  // TODO figure out how to get instance / full URI pattern?
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose jetpack-compose-navigation

1
推荐指数
1
解决办法
698
查看次数