美文网首页
[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