JetBrains 宣布 Jetpack Compose for Web,使用 Kotlin 开发适配多端的 Web UI
JetBrains 宣布了一款名为“Jetpack Compose for Web”的新工具,官方介绍称此项目基于 Google 现代 UI 工具包 Jetpack Compose,支持使用 Kotlin 编写响应式 Web UI。
Jetpack Compose 是用于构建原生界面的新款 Android 工具包。它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。UI 代码和预览如下图所示:
据介绍,Jetpack Compose for Web 可简化并加速 Web 应用的 UI 开发,目标是在 Web、桌面和 Android APP 之间实现 UI 代码共享,一套代码适应多端。目前处于技术预览阶段。
fun greet() = listOf("Hello", "Hallo", "Hola", "Servus").random() renderComposable("greetingContainer") { var greeting by remember { mutableStateOf(greet()) } Button(attrs = { onClick { greeting = greet() } }) { Text(greeting) } } Result: Servus
使用 Compose for Web 构建用户界面
借助 Compose for Web,开发者通过使用 Kotlin 并应用 Jetpack Compose 的概念和 API 为 Web 构建响应式用户界面,以表达应用程序的状态、行为和逻辑。
可组合的 DOM API
- 通过 DOM 元素和 HTML 标签表达设计和布局
- 使用类型安全的 HTML DSL 构建 UI 表示形式
- 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观
- 通过 DOM 子树与其他 JavaScript 库集成
fun main() { renderComposable("root") { var platform by remember { mutableStateOf("a platform") } P { Text("Welcome to Compose for $platform! ") Button(attrs = { onClick { platform = "Web" } }) { Text("...for what?") } } A("https://www.jetbrains.com/lp/compose-web") { Text("Learn more!") } } }
具有 Web 支持的多平台小部件
- 通过利用 Kotlin 的 Expect-actual 机制来提供特定于平台的实现,从而使用和构建可在 Android、桌面和 Web 上运行的 Compose 小部件
- 处于实验性阶段的一组布局原语 (layout primitives) 和API,这些原语和 API 与 Compose for Desktop/Android 的功能相似
示例代码
使用 Composable DOM 编写简单的计数器
fun main() { val count = mutableStateOf(0) renderComposable(rootElementId = "root") { Button(attrs = { onClick { count.value = count.value - 1 } }) { Text("-") } Span(style = { padding(15.px) }) { /* we use inline style here */ Text("${count.value}") } Button(attrs = { onClick { count.value = count.value + 1 } }) { Text("+") } } }
声明和使用样式表
object MyStyleSheet : StyleSheet() { val container by style { /* define a class `container` */ border(1.px, LineStyle.Solid, Color.RGB(255, 0, 0)) } } @Composable fun MyComponent() { Div(attrs = { classes(MyStyleSheet.container) /* use `container` class */ }) { Text("Hello world!") } } fun main() { renderComposable(rootElementId = "root") { Style(MyStyleSheet) /* mount the stylesheet */ MyComponent() } }
声明和使用 CSS 变量
object MyVariables : CSSVariables { val contentBackgroundColor by variable<Color>() /* declare a variable */ } object MyStyleSheet: StyleSheet() { val container by style { MyVariables.contentBackgroundColor(Color("blue")) /* set its value */ } val content by style { backgroundColor(MyVariables.contentBackgroundColor.value()) /* use it */ } } @Composable fun MyComponent() { Div(attrs = { classes(MyStyleSheet.container) }) { Span(attrs = { classes(MyStyleSheet.content) }) { Text("Hello world!") } } }
项目示例
下面提供了一些示例应用程序,分别使用 DOM 和 Widget API 进行了演示。
- Jetpack Compose for Web 的登录页面本身就是一个 Compose 项目,使用 DOM API 和 CSS DSL 定义其内容、结构和布局,点此查看源码
- Falling Balls 游戏通过重用 Compose for Desktop Demo 的实现来演示多平台小部件,点此查看源码

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
红帽发布 OpenShift 开发者沙盒,加速 K8s 应用开发
红帽近日发布了针对红帽 OpenShift 的开发者沙盒,这是一个基于 OpenShift 的开发环境,旨在让企业加快基于 Kubernetes 的应用从代码到生产的过程。OpenShift 沙盒为开发者提供了一种更简单、无成本的方式,让开发者可以使用将在生产环境中运行的相同基础结构和工具来开始构建应用程序,而不必担心配置问题。 通过 OpenShift 沙盒和我们最新更新的开发者工具,使开发者更容易为 Kubernetes 进行构建。 红帽开发者工具和项目部副总裁 Mithun Dharv 表示,如今开发人员面临着更快地交付应用程序的压力,同时要跟上快速变化的技术环境。数字化转型工作的加速推动了这一点,以将新的创新推向市场,而围绕 IT 现代化和应用开发的必要性也在不断增强。Kubernetes 是混合云架构的一个基础平台。通过消除开发人员为 Kubernetes 构建应用程序的障碍,红帽正在使开发人员能够加速开发过程。 OpenShift 开发者沙盒在一个共享的多租户集群中提供了一个私有的 OpenShift 环境,并预先配置了一套开发者工具。该基础设施和工具是紧密集成的,旨在为原...
- 下一篇
观看视频就会导致崩溃,微软正紧急修复 Edge 浏览器问题
最近一段时间,当用户将 Edge 浏览器升级至 90 版本之后,似乎开始遭遇浏览器频繁崩溃的问题。如果你也面临这样的问题,那你并不是个例。 近日有大量用户报告,在他们播放 YouTube 视频时面临浏览器持续崩溃的问题,在 Reddit 上详细描述这个问题的帖子甚至可以追溯到 15 天前。 当时一名来自微软的工程师在论坛上回应,让用户尝试禁用硬件加速来作为该问题的解决方法。然而,该工程师昨天在 Reddit 上证实,这个错误可能比原本预计的更为严重,而且有 "围绕这个问题的多种情况"。除此之外他还补充道,那些面临浏览器崩溃的用户可以尝试下载并运行最新的 Canary 版本,以检查他们的问题是否已经通过该版本中实施的错误修复得到解决,并希望受到影响的用户可以提供反馈和崩溃报告。 该问题能够持续复现,即用户打开 YouTube 开始以全屏模式播放视频,之后浏览器就会出现无响应,随后浏览器就直接崩溃。根据 Reddit 用户反馈,目前的临时解决方法是前往浏览器的任务管理器(按 shift + esc),关闭消耗资源最多的任务。 在修复更新最终被引入稳定版本之前,我们可能还会看到有更多用户遭遇...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案