介绍
本项目是玩安卓compose版,主要用来学习compose的写法。
业务功能都是简单的,偏重ui使用,使用玩安卓的开放api和一些自造假数据。有些功能是不完整的。
希望能在大家学习compose过程中提供帮助。也能获得反馈,让自己进步。
预览
技术栈
- kotlin
- compose
- flow。就简单一用,viewmodel中发个消息。
- coil 网络图片加载库
- Chucker 网络接口抓包查看库
- 原生navigation导航。整体只有一个activity。对于compose而言,确实适合单一activity,不要排斥。
- Exoplayer。 视频播放
- retrofit+okhttp+协程
- compose各种预览。compose的预览确实方便。
- 主题,深色模式。这里深色模式只适配了少数页面。深色模式的适配是个麻烦活,但是逻辑已经ok了。
主要功能
- 首页。文章列表,banner,下拉刷新上拉加载更多。
- 项目页。tab搭配pager实现多页列表。
- 外卖页。仿美团外卖蜜雪冰城页,左右双列联动,整体嵌套滑动效果处理。
- 商品页。双列网格布局和双列瀑布流布局。
- 客服页。仿照常见的聊天页,有表情,能输入文字。
- 抖音页。仿抖音上下滑动视频播放,有视频缓存和播放进度记录,切换播放比较流畅。
- 手写签名页。Canvas绘制。不得不说compose的绘制比原生写法简单易懂多了。
体会
- compose写ui比原生快捷很多,而且官方ui组件很多能直接用,不像原生xml写法时官方ui组件大部分没法用,都得第三方和自写。由于compose使用纯代码编写ui,使得ui的灵活性变强,配合上预览功能,写ui确实很方便。实现边框、圆角、列表、吸顶布局、触摸、滑动、绘制这些都更简便。跟Android原生view也能完全互相用,用法很简单。后续还有Kotlin Multiplatform来助力实现跨平台的优势。
- 但是它也有一些缺点,必须得会kotlin和协程,理解声明式ui和状态变量的更新机制,ui代码里嵌套了很多状态变量,尤其是业务复杂的时候,我觉得代码可读性和可维护性糟糕,倒腾各状态变量关系时头大。典型的写的人觉得很痛快,维护的人一个劲的骂。还有compose的副作用函数,比较像生命周期的概念,但是不一样,比较不好理解,api也多,有点乱套,有时写完都不知道对不对。viewmodel创建推荐用hilt依赖注入,但是我不喜欢依赖注入,感觉代码面目全非,本项目没用。
- 总体而言我觉得compose优点大于缺点,之后会是大势所趋,发展越来越好。