标签: compose-multiplatform

如何在 Jetpack Compose 中以便携式方式实现计时器?

我想编写一些应用程序,让一些事情按计划进行。

每隔几分钟轮询一次 URL 进行更新似乎是一个相当常见的用例。不过,在这种特殊情况下,我只是想实现一个时钟。

这有效:

@Composable
fun App() {
    var ticks by remember { mutableStateOf(0) }

    // Not 100% happy about this unused variable either
    val timer = remember {
        Timer().apply {
            val task = object : TimerTask() {
                override fun run() {
                    ticks++
                }
            }
            scheduleAtFixedRate(task, 1000L, 1000L)
        }
    }

    MaterialTheme {
        Text(
            // A real application would format this number properly,
            // but that's a different question
            text = "$ticks"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

但我必须导入java.util.Timer,所以它不会是可移植的。

Jetpack Compose …

timer kotlin android-jetpack-compose compose-desktop compose-multiplatform

18
推荐指数
2
解决办法
2万
查看次数

桌面托盘可组合件的样式撰写

我一直在尝试 Compose for Desktop,并且试图弄清楚 Jetbrain 如何设计Tray可组合项的样式。我假设这就是他们用来构建 Jetbrains Toolbox 的方法,因为他们写了一篇关于如何将 Toolbox 迁移到 Compose for Desktop 的文章(请参阅此处)

默认托盘 Jetbrains 工具箱托盘
在此输入图像描述 在此输入图像描述

图像来自 Ubuntu 22;我还没有测试过 Windows 或 Mac。

system-tray tray compose-desktop compose-multiplatform

10
推荐指数
1
解决办法
581
查看次数

如何在单击 Compose Multiplatform 中的其他位置时清除 BasicTextField 的焦点?

我有一个BasicTextFieldJetbrains Compose Multiplatform 桌面版。当我单击它时,文本字段获得焦点并变得可编辑。但是,当我单击应用程序中的其他位置时,焦点不会丢失,并且该字段仍然可以编辑,就像我刚刚单击它一样。

我知道这种行为是正常的并且是故意的。尽管如此,我希望当用户单击其他地方时 TextField 变得不聚焦,无论它是可单击的还是不可单击的可组合项。

我该如何实现这一目标?

kotlin android-jetpack-compose jetbrains-compose compose-multiplatform

7
推荐指数
1
解决办法
3447
查看次数

Gradle,在撰写多平台项目中使用material3

我正在使用 Jetpack Compose Multiplatform Desktop 做一个项目。我对 Gradle 不太熟悉,我想在我的项目中使用 Material 3。所以,我在文件中添加了这一行build.gradle.kts

implementation("androidx.compose.material3:material3:1.0.0-alpha14")
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下命令将库导入 Kotlin 文件中时:

import androidx.compose.material3.*
Run Code Online (Sandbox Code Playgroud)

我有一个unresolved reference问题。

这是我的build.gradle.kts文件:

import org.jetbrains.compose.desktop.application.dsl.TargetFormat

plugins {
    kotlin("multiplatform")
    id("org.jetbrains.compose")
}

group = "com.example"
version = "1.0-SNAPSHOT"

repositories {
    google()
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}

kotlin {
    jvm {
        compilations.all {
            kotlinOptions {
                jvmTarget = "18"
                freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn")
            }
        }
        withJava()
    }
    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation(compose.desktop.currentOs)
                implementation("androidx.compose.material3:material3:1.0.0-alpha14")
            }
        }
        val jvmTest by getting
    } …
Run Code Online (Sandbox Code Playgroud)

gradle compose-multiplatform

7
推荐指数
1
解决办法
2979
查看次数

图像的可点击区域(鼠标悬停事件)

知道如何处理图像上的可点击区域吗?如果在桌面模式下(是的,桌面模式现在可用;请参阅https://www.jetbrains.com/lp/compose)有类似的东西onMouseover,那么当鼠标悬停在视图上时视图会突出显示,那就太好了。

android android-jetpack-compose compose-desktop compose-multiplatform

6
推荐指数
1
解决办法
4379
查看次数

使用 Compose for Desktop(Compose 多平台)捆绑文件

我是一名 Android 开发人员,拥有使用 Jetpack Compose 的经验。现在,我正在尝试构建桌面应用程序,所以我找到了这个Compose for Desktop项目。我想JSON使用桌面应用程序存储一个文件,以便我可以从桌面应用程序读取该文件并将其显示给用户。不仅是 JSON 文件,我还想存储一些其他文件,例如 HTML。

在 Android 中,我可以使用rawassets文件夹,但我不知道如何在 Compose for Desktop 中执行此操作。

如果有人能指出我正确的方向,我将不胜感激。

kotlin android-jetpack-compose compose-desktop compose-multiplatform

6
推荐指数
1
解决办法
1468
查看次数

在 Box 范围内时无法使用隐式或显式接收器

我正在学习 Jetbrains 的“Compose Multiplatform”,它基于 Jetpack Compose。

一些信息

  • 科特林:1.5.31
  • Intellij:2021.3.1

因此,在构建下面的代码时,我收到错误:

fun Modifier.align(alignment: Alignment.Horizontal): Modifier' can't be called in this context by implicit receiver. Use the explicit one if necessary

此错误出现在这一行:

Icon(Icons.Filled.Close, "", Modifier.align(Alignment.CenterHorizontally))

Modifier我已经尝试添加完整的包androidx.compose.ui.Modifier.align(),但它仍然出现关于接收器的错误。如果它不在RowColumnBox布局内,此错误就会消失。我没有尝试过其他很多人来看看他们是否也有问题。我相信这个框架仍然是 alpha,所以我只是想确保在 github 上发布问题之前我没有遗漏任何东西,因为我找不到其他人引用这个问题。

复制:

  1. 创建新项目(编写多平台应用程序)
  2. 将 App.kt (common -> src -> commonMain -> kotlin) 替换为以下代码
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Menu
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp …
Run Code Online (Sandbox Code Playgroud)

kotlin compose-multiplatform

6
推荐指数
1
解决办法
4171
查看次数

在 Compose Multiplatform 中从 URL 加载图像

我目前正在开发一个使用 Compose Multiplatform 项目的项目,并寻找处理从 URL 加载图像的方法。但是,由于不支持 Coil,我还没有找到解决方案。

我遇到过一个转换位图的手动 Ktor 实现,但它缺乏缓存支持和其他实现细节(例如加载、错误状态)。

有没有人使用库集成图像加载或找到 Compose Multiplatform 的其他替代方案?

kotlin-multiplatform android-jetpack-compose compose-multiplatform

6
推荐指数
1
解决办法
1439
查看次数

无法找到 kotlinx-atomicfu Compose 多平台 iOS

我正在尝试构建从 JetBrains 的存储库compose-multiplatform-ios-android-template克隆的项目。该代码在 Android 上运行良好,但在 iOS 上抛出错误。我也尝试过更新cocoapods。尽管如此,这还是会产生错误。现在,当我尝试在Android Studio上构建项目时,我的 logcat 上出现以下错误

java.lang.IllegalStateException: e: Could not find "../shared/build/kotlinTransformedMetadataLibraries/commonMain/org.jetbrains.kotlinx-atomicfu-0.17.3-nativeInterop-8G5yng.klib" in [/Users/rasel/Library/Application Support/kotlin/daemon]
    at org.jetbrains.kotlin.library.SingleFileResolveKt$resolveSingleFileKlib$1.fatal(SingleFileResolve.kt:21)
    at org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver.resolve(SearchPathResolver.kt:171)
    at org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver.resolve(SearchPathResolver.kt:176)
    at org.jetbrains.kotlin.library.CompilerSingleFileKlibResolveStrategy.resolve(SearchPathResolver.kt:298)
    at org.jetbrains.kotlin.library.SingleFileResolveKt.resolveSingleFileKlib(SingleFileResolve.kt:24)
    at org.jetbrains.kotlin.library.SingleFileResolveKt.resolveSingleFileKlib$default(SingleFileResolve.kt:15)
    at org.jetbrains.kotlin.cli.metadata.KlibMetadataDependencyContainer.<init>(K2MetadataKlibSerializer.kt:117)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer$serialize$analyzer$1.invoke(K2MetadataKlibSerializer.kt:49)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer$serialize$analyzer$1.invoke(K2MetadataKlibSerializer.kt:43)
    at org.jetbrains.kotlin.cli.metadata.CommonAnalysisKt.runCommonAnalysisForSerialization(CommonAnalysis.kt:42)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer.serialize(K2MetadataKlibSerializer.kt:48)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler.doExecute(K2MetadataCompiler.kt:122)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler.doExecute(K2MetadataCompiler.kt:40)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1486)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Unknown …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform compose-multiplatform

3
推荐指数
1
解决办法
838
查看次数

JetBrains Compose for Desktop 标题栏背景颜色或深色模式

JetBrains Compose for Desktop 中有没有办法更改标题栏背景颜色或仅将其更改为深色模式?我使用的是 MacOS,因此该栏可以是浅色或深色。也可以让标题栏本身不可见(但保留关闭、最小化和最大化按钮)并在其下方创建您自己的视图。

我正在查看撰写窗口代码,但在那里找不到它。

compose-desktop compose-multiplatform

2
推荐指数
1
解决办法
2226
查看次数

Kotlin 和 Compose 有什么区别?

我开始学习kotlin,遇到了很多找不到的问题:kotlin multiplatform 和 compose multiplatform 有什么区别?他们可以在同一个项目中一起工作吗?什么是更初级的?

我从官方文档中了解到的是,kotlin multiplatform是一个在多种系统上进行开发的框架,而compose multiplatform是对android compose的改编

kotlin-multiplatform compose-multiplatform

2
推荐指数
1
解决办法
2235
查看次数

无法在 Kotlin Multiplatform 中使用字体

很简单;刚刚通过向导创建了一个 Compose Multiplatform 项目。

继续创建主题;但我想使用相同的字体,所以我poppins.ttfcommonMain/resources/font/.

然后我在模块中声明了以下内容commonMain

expect val projectFontFamily: FontFamily
Run Code Online (Sandbox Code Playgroud)

在我使用的模块上commonDesktop

actual val projectFontFamily: FontFamily = FontFamily(
  Font("font/poppins.ttf")
)
Run Code Online (Sandbox Code Playgroud)

太棒了,成功了。从今起commonAndroid

actual val projectFontFamily: FontFamily = FontFamily(
  Font(R.font.poppins)
)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,该类R未正确生成,我无法使用R.font.poppins.

如果我将“资源”重命名为“res”并将字体推入其中,res/font/那么它就可以工作。(但我只是复制了字体文件)。

我该如何解决这个问题?

kotlin android-resources kotlin-multiplatform android-jetpack-compose compose-multiplatform

1
推荐指数
1
解决办法
1555
查看次数