Kotlin 多平台 Compose + 桌面 + Web + 移动

Luc*_*hin 8 kotlin-multiplatform android-jetpack-compose

目前是否可以有一个使用 compose 的 kotlin 多平台项目来同时共享桌面、Web 和移动设备的 ui 代码?我发现的所有示例仅涵盖带有 JS Front + Jvm Backend 或 JVM Android + Desktop + Common Module 的多平台,并且我在同时使用所有这些设置项目时遇到了麻烦。

我尝试这样做:

plugins {
    kotlin("multiplatform")
    id("org.jetbrains.compose") version "1.0.1-rc2"
    id("com.android.library")
}
kotlin {
    android()
    jvm("desktop") {
       ...
    }
    js{
       ...
    }
    sourceSets {
        val commonMain by getting {
            dependencies {
               ...
            }
        }
        val commonTest by getting {
            dependencies {
               ...
            }
        }
        val androidMain by getting {
            dependencies {
                ...
            }
        }
        val androidTest by getting {
            dependencies {
                ...
            }
        }
        val desktopMain by getting {
            dependencies {
                ...
            }
        }
        val desktopTest by getting
        val jsMain by getting{
            dependencies{
                ...
            }
        }
        val jsTest by getting {
            dependencies {
                ...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它会产生错误:

:common:jsMain: Could not resolve org.jetbrains.compose.runtime:runtime:1.0.1-rc2.
Required by:
    project :common
Run Code Online (Sandbox Code Playgroud)

如果我评论 JS 相关部分它可以工作,或者如果我评论所有非 js 相关内容它也可以工作

评论所有与撰写相关的内容也有效

问题仅在于将所有内容结合起来时

Phi*_*hov 8

简短的回答是:,目前这是不可能的。

JB 团队正在致力于此类支持,可以在这些示例中进行测试,但目前它还处于实验阶段,不能保证很快就会发布。Compose JB 版本现已与 Android Compose 同步,因此我预计两者将在同一时间发布1.2.0 ,即使 Web 支持尚未完成。


我无法重现您的错误,但我假设您尚未从常见依赖项中删除compose.foundation和。compose.material

目前,仅compose.runtime适用于公共模块,这使得此时几乎不可能进行任何布局:甚至ButtonText都不可用。

正如您在 JS 应用程序示例中看到的,Text不是从 导入的androidx.compose.material.Text,而是从 导入的org.jetbrains.compose.web.dom.Text,这是一个完全不同的元素,因此它不能在公共模块中使用。

在这一点上,我想说 Compose JS 是另一个允许你以 Compose 风格编写 UI 的框架。


Luc*_*hin 2

Jetbrains 使用一些示例更新了 github 存储库:

https://github.com/JetBrains/compose-jb/tree/master/experimental/examples

现在可以使用版本“1.2.0-alpha01-dev675”,但并非所有组件都可以工作,并且仍处于早期的 alpha 阶段。