news 2026/5/14 4:39:41

Multiplatform - 使用 Jetpack 组件(ViewModel、Navigation3)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Multiplatform - 使用 Jetpack 组件(ViewModel、Navigation3)

一、概念

二、ViewModel

2.1 添加依赖

[versions] viewModel = "2.9.6" [libraries] jetbrains-viewModel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "viewModel" } //可选(解决桌面端对于默认调度器 Dispatchers.Main.immediate 可能不可用) kotlinx-coroutinesSwing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }

2.2 使用

在非 JVM 平台上,无法通过类型反射实例化对象。因此在公共代码中,不能直接调用无参数的 viewModel() 函数,每次创建 ViewModel 实例时,至少需提供一个初始化器作为参数。

若仅提供初始化器,库会在底层创建默认工厂。但您也可以实现自己的工厂,并调用公共 viewModel(...) 函数中更显式的重载版本,这与 Jetpack Compose 中的使用方式一致。

@Composable fun Demo( viewModel: MyViewModel = viewModel { MyViewModel() } ) {...}

三、Navigation3

3.1 添加依赖

[versions] navigation3 = "1.0.0-alpha06" navigation3ViewModel = "2.10.0-alpha08" navigation3Adaptive = "1.3.0-alpha04" navigation3Browser = "0.2.0" [libraries] jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "navigation3" } jetbrains-navigation3-viewModel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "navigation3ViewModel" } //可选(自适应布局) jetbrains-navigation3-adaptive = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "navigation3Adaptive" } //可选(回退支持web浏览器历史) jetbrains-navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "compose-multiplatform-navigation3-browser" }

3.2 使用

@Serializable private data object RouteA : NavKey @Serializable private data class RouteB(val id: String) : NavKey // Creates the required serializing configuration for open polymorphism private val config = SavedStateConfiguration { serializersModule = SerializersModule { polymorphic(NavKey::class) { subclass(RouteA::class, RouteA.serializer()) subclass(RouteB::class, RouteB.serializer()) } } } @Composable fun BasicDslActivity() { // Consumes the serializing configuration val backStack = rememberNavBackStack(config, RouteA) NavDisplay( backStack = backStack, //... ) }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 13:02:52

谣言只是表象,投资者耐心正在耗尽!

一,市场强势反弹,把前天跌掉的大部分失地都收回来了,但目前看,这还只能算反弹,不是反转。前面重兵把守的 4100 点,现在就是市场的 “天王山”,能不能拿下,是本周最关键的任务。尐程序…

作者头像 李华
网站建设 2026/5/8 18:34:13

软件测试项目实战,Web测试常用测试点,即拿即用宝典

前言 由于web应用与用户直接相关,又通常需要承受长时间的大量操作,因此web项目的功能和性能都必须经过可靠的验证。 这就要经过web项目的全面测试。Web应用程序测试与其它任何一种类型的应用程序测试相比没有太大差别。Web的流行和无所不在&#xff0c…

作者头像 李华
网站建设 2026/5/9 22:38:29

Fiddler抓取HTTPS最全(强)攻略

对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler。 但是初学时,大家对于fiddler如何抓取HTTPS难免走歪路,也许你一步步按着网上的帖子成功了,这自然是极好的。 但也有可能没那么幸运,这时候你就会很抓狂。 …

作者头像 李华
网站建设 2026/5/13 0:21:21

DeepSeek架构新探索!开源OCR 2诞生!

DeepSeek架构新探索!开源OCR 2诞生! 此前,DeepSeek-OCR的首次问世,已引发视觉压缩领域的广泛关注与学术探讨;而在本次迭代中,DeepSeek研发团队聚焦视觉编码模块开展核心技术升级。值得关注的是,…

作者头像 李华
网站建设 2026/5/9 14:53:18

直播平台主播们的换妆功能是如何实现的?深入了解美颜SDK功能开发

当你在直播平台刷到一位主播,轻点屏幕就能在“清新裸妆”“元气桃花妆”“高级冷白皮”之间自由切换时,很多人会下意识以为: “这不就是个滤镜吗?” 但真正做过直播系统或音视频开发的人都知道——直播换妆,远不只是贴…

作者头像 李华