主要翻译自官方文档Side-effects in Compose,并不是直译,有些细微调整。
一个副作用是指发生在composable函数范围之外的应用状态的一个变化。由于composable函数的生命周期和诸如不可预测的重组,以不同的顺序执行composable的重组,或者重组可能会被跳过等性质,理论上composable应该要是无副作用的。
主要翻译自官方文档Side-effects in Compose,并不是直译,有些细微调整。
一个副作用是指发生在composable函数范围之外的应用状态的一个变化。由于composable函数的生命周期和诸如不可预测的重组,以不同的顺序执行composable的重组,或者重组可能会被跳过等性质,理论上composable应该要是无副作用的。
这篇文章大部分是官方文档的翻译,但并不是严格的翻译,同时也加入了笔者自己的理解。
通过前面的一系列文章我们已经基本掌握了使用Jetpack Compose来构建UI的方法,在接下来的几篇文章中将重点转移到Compose本身,理解一下Compose是如何把一坨坨的函数(Composables)转化成为目标平台UI的。先从composable的生命周期开始。
除了一些玩具性的Demo以外,相信任何一个应用程序不可能只有一个页面,最为极简的应用也至少会有两个页面,一个主页和一个设置页。对于传统的View系统来说对于导航这块没有专门的API,一般都是自己写逻辑跳Activity,或者跳到Fragment,然后再反向的Back,所以有了很多三方的各种Router类库(如大阿里的ARouter,货拉拉的TheRouter)。其实谷歌已经提供了解决方案,在Jetpack中提供了Navigation组件,专门用于解决应用内部各种页面之间跳转的问题。
通过前面的一篇文章我们学会了如何用各种高级别抽象的扩展函数来进行手势处理。像clickable,draggable,scrollable和anchoredDraggable都是类似于View系统中的各种回调(如onClick或者onScroll)是高级别的抽象,这里我们只能处理手势,大部分情况下这也够用了。
对于Jetpack Compose来说动画是一个很大的话题,对应的API也比较繁杂,我们在前面一篇文章中介绍了最为常用的创建动画的方式,在此基础之上来学习一些更为复杂的动画玩法。
在Jetpack Compose中创建自定义绘制内容的方式不止一种,除了前面提到的通过Canvas函数的方式以外,还可以通过Modifier的几个扩展函数更为灵活实现一些的自定义内容。今天就来学习一下如何使用Modifier的扩展函数来绘制自定义内容。