compose multiplatform 常用库

目录

权限

log

toast

webview

http请求

原子操作

数据库

lifecycle

时间

序列化


multiplatform中,旧的库不可用了.需要新的库,新的库,目前不算多,比起其它多平台略少了.

这里介绍一些常用的.

Klibs.io --- Search 2200+ KMP projects

Compose Libraries

这两个网站搜索相应的库.

权限

acccompanist,这个不支持多平台的. calf这个可以com.mohamedrejeb.calf:calf-permissions, calf还有其它功能,比如选文件,可以去github上找到这个,都是支持多平台的.用法是差不多的.

log

我用了几个,发现de.peilicke.sascha", name = "log4k 这个是比较合适的,不需要初始化,静态方法直接调用.

toast

这个我用alert-kmp = { module = "io.github.khubaibkhan4:alert-kmp", version.ref = "alertKmp" }

webview

我用compose-webview = { group = "io.github.kevinnzou", name = "compose-webview-multiplatform", version.ref = "webview" }

http请求

okhttp是不行了,但可以作为后端去替换.官方库ktor功能比较全面,毕竟是基础功能,可以配置okhttp3后端,当然还有很多可用的,区分可以从官网上找.

ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktorVersion" }

ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktorVersion" }

ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktorVersion" }

ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktorVersion" }

原子操作

java有,kotlin就要用其它库了.kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" }

数据库

之前用过sqldelight,这个使用不方便,不够对象化,谷歌已经把room支持多平台了,所以继续用room,需要具体的依赖实现:sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }

lifecycle

这个是移动端已经支持了,但需要换,不能用androidx.要用org.jetbrains.androidx.lifecycle:比如

androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }

时间

java的时间也不能用了.换kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" }

序列化

gson这些不能用了,换ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktorVersion" },这个相对麻烦一点,每个类要声明一下,引入插件,但解析自定义的type比gson容易的多.需要注意配置

val jsonParser = Json {

ignoreUnknownKeys = true

}

如果要自定义,稍微麻烦一些,

复制代码
Int?类型:obj.get("pack_id")?.jsonPrimitive?.int ?: 0 
复制代码
String?类型:obj.get("country")?.jsonPrimitive?.content

构建一个jsonarray:

复制代码
val array = buildJsonArray {
    if (integers != null) {
        var info: Int
        for (i in integers.indices) {
            info = integers[i]
            add(buildJsonObject { info })
        }
    }
}
相关推荐
儿歌八万首4 小时前
Jetpack Compose 中 Kotlin 协程的使用
android·ui·kotlin·协程·compose
00后程序员张7 小时前
iOS WebView 调试实战 全流程排查接口异常 请求丢失与跨域问题
android·ios·小程序·https·uni-app·iphone·webview
魑魅魍魉95278 小时前
android 信息验证动画效果
android
给钱,谢谢!8 小时前
Flutter权限管理终极指南:实现优雅的Android 48小时授权策略
android·flutter
Mr_Xuhhh11 小时前
QT窗口(4)-浮动窗口
android·开发语言·网络·数据库·c++·qt
csdn_li_121212 小时前
cocosCreator2.4 Android 输入法遮挡
android
墨狂之逸才12 小时前
ViewModel创建方式以及by lazy的问题。
android
技术与健康13 小时前
【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本
android·人工智能·智能手机