不得不说 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,值得期待。
网友评论