美文网首页
[KtJC] 迁移至 compose dev06

[KtJC] 迁移至 compose dev06

作者: 何晓杰Dev | 来源:发表于2020-03-06 10:48 被阅读0次

不得不说 Jetpack Compose 发版的速度实在是快,一不留神居然已经到了 0.1.0-dev06 版本了,我们之前拿 dev03 开发的代码已不可用,需要进行迁移。本文即是讲述迁移的一些细节。

当然了,在往下看之前,还是要明确一点,compose 目前连 alpha 都算不上,更别提在正式项目里使用了,我们可以做一些前瞻的研究,并等待它的正式发布,不然你就会遇到如本文的问题,即每个版本都要进行迁移。


一、获取 context

dev03 代码:

val ctx = +ambient(ContextAmbient)

dev06 代码:

val ctx = ContextAmbient.current

二、获取res内的图片

dev03 代码:

val vector = +vectorResource(id)
val img = +imageResource(id)

dev06 代码:

val vector = vectorResource(id)
val img = imageResource(id)

三、设置 Container 的大小

dev03 代码:

Container(modifier = modifier wraps Size(vector.defaultWidth.toDp(), vector.defaultHeight.toDp()))

dev 06 代码:

Container(modifier = modifier + LayoutSize(vector.defaultWidth, vector.defaultHeight))

四、声明按钮 (这个改动简直匪夷所思)

dev03 代码:

Button(text = "Click") {
    ctx.toast("${state.itemIndex}")
}

dev 06 代码:

Button(onClick = {
    ctx.toast("${state.itemIndex}")
}) {
    Text(text = "Click")
}

五、Padding

dev03 代码:

Padding(padding = 32.dp) {
    Text(text = state.list[index])
}

dev 06 代码:

Text(text = state.list[index], modifier = LayoutPadding(Dp(32f)))

六、声明 Tab (同样的匪夷所思)

dev03 代码:

Tab(text = text, selected = section.ordinal == index) {
    section = Sections.values()[index]
}

dev 06 代码:

Tab(text = {  Text(text = text0) }, selected = section.ordinal == index, onSelected = {
    section = Sections.values()[index]
})

七、绘制图片(神改动,只是做 SVG 很累哇)

dev03 代码:

DrawImage(image = img)

dev 06 代码:

DrawVector(vectorImage = img)

八、Expanded

dev03 代码:

Column(modifier = Expanded)

dev 06 代码:

Column(modifier = LayoutSize(Dp.Infinity, Dp.Infinity))

九、TopAppBar

dev03 代码:

TopAppBar(title = { Text(text = "Title") }) {
    VectorImageButton(id = R.drawable.ic_launcher) {
        onOpen()
    }
}

dev 06 代码:

TopAppBar(title = {Text(text = "Title") }, navigationIcon = {
    VectorImageButton(id = R.drawable.ic_launcher_foreground) {
        onOpen()
    }
})

十、AppBarIcon(只想说一句无语)

dev03 代码:

TopAppBar(title = { Text(text = "Title")}, actionData = listOf("btn1", "btn2",), navigationIcon = {
    BackButton()
}) {
    AppBarIcon(icon = img, onClick = {
        ctx.toast(it)
    })
}

dev 06 代码:

TopAppBar(title = {Text(text = "2333")}, navigationIcon = { BackButton() }, actions = {
    VectorImageButton { }
    VectorImageButton { }
})

十一、Spacer(简直蛋疼)

dev03 代码:

HeightSpacer(height = 4.dp)

dev 06 代码:

Container(height = Dp(4f)) { }

总而言之,dev06 甚至还不如 dev03 强大,虽说补充了一些组件,增加了类似于 RecyclerView 的列表等,但是整体而言是在退步,因为很多改动并没有带来任何好处,反而带来了代码上更重的负担。由于是 dev 版本,API 也都不稳定,随时存在着被删改的情况。是的,你没看错,google 会删!

最后再说一句,目前千万不要用在正式开发上。但是从长远而言,我仿佛看到了一个 kotlin 实现的 flutter,值得期待。

相关文章

网友评论

      本文标题:[KtJC] 迁移至 compose dev06

      本文链接:https://www.haomeiwen.com/subject/wwkvrhtx.html