在 Kotlin Multiplatform 上复制到剪贴板

3

我目前还找不到有人做过这个的,所以我会尝试清楚地说明我面临的问题。

我的KMP应用程序中共享模块中有一个名为compose-ui的模块。 compose-ui有一个commonMain目录,其中包含所有组成UI(在桌面和安卓应用之间共享的屏幕)。现在问题是,在Android上将文本复制到剪贴板需要Context,而无法在commonMain中访问它,那好吧,使用@Composable copyToClipboard(text: string)预期/实际函数,但使用IconButton及其OnClick:() -> Unit会导致错误,即@Composable仅可从合成上下文调用。 我不确定该如何处理这个问题,我需要某种方式来访问上下文以访问剪贴板管理器,但我无法访问它也无法传递它。

1个回答

0

类似这样的代码应该可以在你的 androidMain 中运行:

@Composable
fun copyClipboardLambda(): () -> Unit {
    val context = LocalContext.current
    return {
        context.yourCopyFunc()
    }
}

在你的视图中:

@Composable
fun View() {
    val copyClipboard = copyClipboardLambda()
    Box(
        modifier = Modifier.clickable {
            copyClipboard()
        }
    )
}

我认为这在多平台环境下不起作用,即在桌面客户端中不存在上下文。 - Breimer
@Breimer copyClipboardLambda 应该是一个 expect 函数,提供的实现是针对 Android 的,而桌面端的实现将会不同,因为它没有上下文。 - Phil Dukhov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接