IDEA 又出新神器,一套代码适应多端!

Posted Java思维导图

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA 又出新神器,一套代码适应多端!相关的知识,希望对你有一定的参考价值。

JetBrains 新推出一款基于多端的 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
94_2.png

使用 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!")
        
    
94_3.png

具有 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!")
        
    

以上是关于IDEA 又出新神器,一套代码适应多端!的主要内容,如果未能解决你的问题,请参考以下文章

IDEA 公司,又出新神器,一套代码适应多端!

JetBrains打造的开发神器,一套代码适应多端!

JetBrains打造的开发神器,一套代码适应多端!

JetBrains 又出了一款新神器,一套代码适应多端!

JetBrains 又出了一款新神器,一套代码适应多端!

JetBrains 又出了一款新神器,一套代码适应多端!