news 2026/6/10 23:02:36

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/6/10 15:32:24

开发员工生日祝福工具,录入员工生日,提前一天提醒,生日定制祝福文案,支持一键发送到员工邮箱/微信,提升员工归属感。

1. 实际应用场景描述 场景: 某互联网公司 HR 小刘发现,员工生日经常因为工作繁忙被忽略,手工发祝福不仅耗时,还容易遗漏。公司希望用更智能、有温度的方式,在员工生日前一天自动发送个性化祝福,提升团队凝聚…

作者头像 李华
网站建设 2026/6/10 12:34:34

【测试面试】2026年软件测试面试题大全(精品带回答的)

前言 软件测试员是在项目的不同阶段一直从事着各种各样的测试,但是当需要测试所需技能状况时,却找不到一个合适的方法。 ……面试时表现自信: 一般说来,面试首先会从了解求职者的概况开始。 然后大多数就是技术问题了。 一、测…

作者头像 李华
网站建设 2026/6/10 12:34:15

python接口自动化测试 | yaml数据驱动参数化,看完这一篇就够了

前言 在yaml之前,程序大多使用json、xml、ini等格式进行数据的描述和传输,这些格式数据类型简单、可读性不好,yaml作为一种数据格式,但是可读性大大提高,方面人类直接编辑、查看里面的内容。 在实际测试过程中&#…

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

ESP32 控制 NRF24L01 2.4G通信例子

NRF24L01 是一款低成本、低功耗的 2.4G 无线通信模块,搭配 ESP32 使用时基于 SPI 通信,通过RF24库可快速实现无线数据收发。本文从实际项目中提取 NRF24L01 核心通信代码,编写纯接收端和纯发送端最小示例,去掉冗余的 WiFi、网页、…

作者头像 李华
网站建设 2026/6/10 12:31:36

不只“除甲醛”:深挖HNOSS产品体系,看专业服务如何守护家庭呼吸安全

在信息纷杂的除甲醛市场,消费者常常陷入技术名词与效果承诺的迷雾。真正的决策依据,应回归可验证、可体验的产品核心优势。本文将以行业专业视角,深度剖析HNOSS如何通过具象化的技术、产品与服务矩阵,将“健康空气”转化为一套值得…

作者头像 李华