news 2026/6/9 17:22:56

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/6 7:19:33

超越 CRUD:深入 SQLAlchemy ORM 的架构核心与高级模式实践

好的,收到您的需求。基于您提供的随机种子,我将为您呈现一篇深入探讨 SQLAlchemy ORM 核心架构、设计哲学与高级实践的深度技术文章。本文旨在超越基础的增删改查,揭示 ORM 如何优雅地映射对象与关系,并驾驭其强大的模式与特性。 …

作者头像 李华
网站建设 2026/6/6 13:03:19

Chord与VSCode完美搭配:C++视频分析开发环境配置

Chord与VSCode完美搭配:C视频分析开发环境配置 1. 为什么需要这套组合? 做视频分析开发的朋友可能都经历过这样的场景:刚写完一段OpenCV代码,想调试时发现VSCode里断点根本进不去;或者好不容易调通了模型推理&#x…

作者头像 李华
网站建设 2026/6/6 11:14:32

Granite-4.0-H-350M实战:轻松实现多语言问答与文本摘要

Granite-4.0-H-350M实战:轻松实现多语言问答与文本摘要 1. 为什么350M参数的模型值得你花5分钟试试? 你可能已经用过不少大模型,但有没有试过这样一个模型:它只有3.5亿参数,却能在一台普通笔记本上跑起来&#xff1b…

作者头像 李华
网站建设 2026/6/8 11:45:51

软件测试之——性能测试,Web性能测试用例(详全)

前言 性能测试 简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。 而web端的性能测试应该注意的指标有:用户操作的响应时间、系统的吞吐量&#…

作者头像 李华
网站建设 2026/6/6 12:43:07

什么是交互测试?

最近有接触到一个有趣的名词:交互测试。 在对这个名词进行解释之前,我先去特意请教了一个产品经理朋友,问下交互的概念。于是知道了我们的行业里面还有很多个有趣的职位:交互设计师、UE、UI、前端、设计.....等等等等这些&#x…

作者头像 李华
网站建设 2026/6/6 13:08:39

最新出炉 -Web自动化测试之playwright:概述

概述 playwright是由微软开发的Web UI自动化测试工具, 支持Node.js、Python、C# 和 Java语言,本文将介绍playwright的特性以及它的简单使用。 playwright特性 playwright具有以下特点: 一、支持所有主流浏览器 支持所有主流浏览器&#x…

作者头像 李华