You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kotlin中通过非@Composable函数传递LocalContext的问题

解决非@Composable函数无法获取Context的问题

问题核心:LocalContext.current是Compose专属的局部API,仅能在标注@Composable的函数作用域内访问,因此直接将writeTextData改为非Composable函数后会因无法获取上下文而失效。

解决方案:将Context作为参数传入非Composable函数

修改writeTextData,让它接收一个Context参数,调用时从Composable函数中传入LocalContext.current即可。

修改后的非Composable函数代码:

fun writeTextData(context: Context){
    var textData = ""

    // 构造文本数据
    textData += ...
    ...

    FileWorks().writeText(context, "setup", "setup", content = textData)
}

在Composable函数中的调用示例:

@Composable
fun SettingsScreen(){
    val context = LocalContext.current
    
    Button(onClick = { writeTextData(context) }) {
        Text("保存配置")
    }
}

额外注意事项

  • 若涉及长期运行的操作,建议传入应用上下文(context.applicationContext)以避免持有Activity上下文引发内存泄漏;本场景为短时间文件写入,直接传LocalContext.current即可。
  • 所有需要调用writeTextData的Composable函数,只需在自身作用域内获取LocalContext.current并传入即可。

内容的提问来源于stack exchange,提问作者Hope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:40:36