weiV DSL 已经设计完成,Widget、Element、View 架构已经搭建好

xbkong
发布于 2022-7-7 17:10
浏览
0收藏

 

昨天早上突发奇想就开干,现在展示一下最新的开发成果。

DSL 样式如下:

class MainActivity : WeiVActivity() {
    private var switch = false
    private var text = "weiV"

    override fun build(): Widget {
        return WeiV {
            Flex(orientation = LinearLayout.HORIZONTAL) {
                Text(text = text, textSize = 14f)
                Text(text = text)
                Flex(
                    key = Key(),
                    orientation = LinearLayout.VERTICAL
                ) {
                    if (switch) {
                        Text(text = text)
                    } else {
                        Text(text = text)
                    }
                    repeat(10) {
                        Button(text = text + it)
                    }
                    for (i in 1..5) {
                        Text(text = text + i)
                    }
                }
            }
        }
    }
}


可以生成并打印出 Widget 树了,是不是跟 Compose 很像呢?

weiV 是可扩展的。它会内置所有常用的 Widget,这些 Widget 都是对系统 View 的包装。但对于第三方库,就需要写扩展,写起来也极其简单,比如给 Button 的扩展如下:

class weiVButton(
    override var key: Key? = null,
    var text: String? = null,
    var textSize: Float? = null,
    var textColor: Int? = null
) :
    LeafRenderWidget<Button>(key) {

    override fun createView(context: Context): Button = Button(context)

    override fun doParameter(view: Button, first: Boolean): Button {
        if (view.text != text) {
            view.text = text
        }
        if (view.currentTextColor != textColor) {
            view.setTextColor(textColor!!)
        }
        if (view.textSize != textSize) {
            view.textSize = textSize!!
        }
        return view
    }
}

fun WeiV.Button(
    key: Key? = null,
    text: String? = null,
    textSize: Float? = null,
    textColor: Int? = null
) {
    addLeafRenderWidget(
        weiVButton(
            key = key,
            text = text,
            textSize = textSize,
            textColor = textColor
        )
    )
}


预计很快 weiV 就可以真正跑起来了。但还任重而道远。首先需要移植 Flutter ConstraintLayout,其次大概率会重写一个 weiV 版本的 RecyclerView,以支持像 Flutter 那样简单的列表用法,不需要写 Adapter。

从长远看,weiV 可能成为继 React Native 和 Flutter 之后的第三个(类)高性能跨平台开发框架。它的前端采用 kotlin DSL,后端使用平台原生 View 渲染。并达到或超越原生 View 系统的性能。

点击查看原文进入 GitHub。

全部写完可能得一个月,欢迎订阅我的公众号关注后续进展。

 

文章转自公众号:FlutterFirst

标签
已于2022-7-7 17:10:59修改
收藏
回复
举报
回复
    相关推荐