Molecule:使用Jetpack Compose构建StateFlow流
创始人
2024-05-27 16:29:28
0

Molecule:使用Jetpack Compose构建StateFlow流

Kotlin Flow

看下面的jetpack compose片段:

@Composable
fun MessageCard(message: Message) {Column {Text(text = message.author)Text(text = message.body)}
}

这段代码最有趣的部分是它实际上是reactive。其反应性为 通过@Composable注释和委托变量抽象出来。例如,假设参数被委托给 MutableState。当Message数据变化时,会驱动Text更新。
Message是下列响应式类型之一:Message Observable Flow MessageCard() Observable Flow
最重要的是提供了composable类型的Kotlin Flow API,例如 StateFlow.collectAsState: State
代码示例如下:

@Composable
fun profilePresenter(userFlow: Flow,balanceFlow: Flow,
): ProfileModel {val user by userFlow.collectAsState(null)val balance by balanceFlow.collectAsState(0L)return if (user == null) {Loading} else {Data(user.name, balance)}
}

不像RxJava和Kotlin Flow 提供复杂的操作符,而简单使用if/else when for等逻辑判断就可以提供响应式代码。
现在的问题是:我将如何在non-composable环境中使用我的composable方法?
答案是 Molecule
https://github.com/cashapp/molecule/
Molecule做了一件事情,将一个composable方法转为FlowState 或者 Flow API之一。

/**
* Create a [Flow] which will continually recompose `body` to produce a stream of [T] values
* when collected.
*/
fun  moleculeFlow(clock: RecompositionClock,body: @Composable () -> T,
): Flow/**
* Launch a coroutine into this [CoroutineScope] which will continually recompose `body`
* to produce a [StateFlow] stream of [T] values.
*/
fun  CoroutineScope.launchMolecule(clock: RecompositionClock,body: @Composable () -> T,
): StateFlow

Molecule允许您为两种不同的重组行为传递两个时钟:

  • ContextClock将委托给MonotonicFrameClock CoroutineContext的调用方。
  • Immediate 将使生成的流在每次快照状态为失效。
    在不失去reactive的情况下编写命令式代码是极佳的选择。详细信息请查看Molecule的README文档。
    https://github.com/cashapp/molecule/blob/trunk/README.md

相关内容

热门资讯

股价走高触发强赎 7月将有两只... 近日,银行正股股价表现强势,多只银行转债触发强制赎回条款。7月1日是杭银转债最后一个交易日,其最后转...
300548,“改名”,股价历... 科技股和顺周期板块再现“跷跷板”走势。今天上午,顺周期板块走强,银行、有色金属、白酒、新能源等板块上...
明阳电路在昆山投资成立集成电路... 人民财讯7月2日电,企查查APP显示,近日,昆山华芯微测集成电路有限公司成立,法定代表人为窦旭才,经...
民生银行“易创E贷”获“202... 在近日举行的第七届数字普惠金融大会上,民生银行“易创E贷”产品凭借在服务科技型中小微企业的创新与实践...
机器人大军逼近,很快,亚马逊的...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 亚马逊正迅速接近仓库...
广东省教育考试院通报:不存在中... 7月2日,广东省教育考试院发布通报称,7月1日下午广东省初中学业水平考试(以下简称“中考”)数学科目...
国际油价承压 中东油企拟放缓全... 财联社7月2日讯(编辑 秦嘉禾)在国际油价下行压力加剧背景下,中东两大国有能源巨头——沙特阿美(Sa...
光伏50ETF、光伏龙头ETF... 光伏设备板块走强,亿晶光电、欧晶科技涨停。银华光伏50ETF、汇添富光伏龙头ETF、浦银安盛光伏龙头...
世界银行发布重磅预测:黄金今年... 错过上半年,别再错过下半年!世界银行继续看好贵金属前景,黄金、白银、铂金或将继续延续强势……世界银行...
洪灝称高分红投资策略应继续有所... 【#洪灝称高分红投资策略应继续有所表现#】中国股市近期一个显著趋势是分红和回购活动显著增加。其中,许...