Очень приятно видеть инструмент отладки пользовательского интерфейса, основанный на мультитерминале, набор кода адаптируется к мультитерминалу, и я поделюсь им с вами ниже.
1. Введение
Инструмент недавно запущен известной компанией JetBrains под названием «Jetpack Compose for Web». В официальном представлении говорится, что этот проект основан на современном наборе инструментов пользовательского интерфейса Google Jetpack Compose, который поддерживает использование Kotlin для написания адаптивного веб-интерфейса. .
Jetpack Compose — это новый набор инструментов Android для создания нативных интерфейсов. Это упрощает и ускоряет разработку интерфейса на Android. Быстро оживляйте свои приложения с помощью меньшего количества кода, мощных инструментов и интуитивно понятного API Kotlin.
Код пользовательского интерфейса и предварительный просмотр показаны ниже:Согласно сообщениям, Jetpack Compose for Web упрощает и ускоряет разработку пользовательского интерфейса веб-приложений.Цель состоит в том, чтобы совместно использовать код пользовательского интерфейса между веб-приложениями, приложениями для настольных компьютеров и Android, а набор кодов может адаптироваться к нескольким терминалам. В настоящее время находится на стадии предварительного просмотра технологии.
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
2. Создавайте пользовательские интерфейсы с помощью Compose for Web
С помощью Compose for Web разработчики создают адаптивные пользовательские интерфейсы для Интернета, используя Kotlin и применяя концепции и API Jetpack Compose для выражения состояния, поведения и логики приложения.
Составной DOM API
- Экспресс-дизайн и верстка с помощью элементов DOM и тегов HTML
- Создавайте представления пользовательского интерфейса с помощью безопасного для типов HTML DSL.
- Получите полный контроль над внешним видом вашего приложения, создав таблицы стилей с помощью CSS DSL с безопасным типом.
- Интеграция с другими библиотеками JavaScript через поддеревья DOM.
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!")
}
}
}
Мультиплатформенный виджет с веб-поддержкой
- Потребляйте и создавайте виджеты Compose, которые работают на Android, настольных компьютерах и в Интернете, используя механизм Kotlin Expect-actual для реализации конкретных платформ.
- Экспериментальный набор примитивов макета и API, которые по функциональности аналогичны Compose for Desktop/Android.
3. Пример кода
Напишите простой счетчик с 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!")
}
}
}
Источник | Программирование программиста