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

相关内容

热门资讯

同飞股份跌2.20%,成交额2... 7月2日,同飞股份盘中下跌2.20%,截至09:35,报49.44元/股,成交2506.17万元,换...
三德科技涨2.42%,成交额5... 7月2日,三德科技盘中上涨2.42%,截至09:35,报24.09元/股,成交5639.26万元,换...
永信至诚跌2.00%,成交额5... 7月2日,永信至诚盘中下跌2.00%,截至09:37,报24.99元/股,成交509.61万元,换手...
通信ETF(515880)开盘... 7月2日,通信ETF(515880)开盘跌0.97%,报1.436元。通信ETF(515880)重仓...
科技50ETF(515750)... 7月2日,科技50ETF(515750)开盘跌0.29%,报1.385元。科技50ETF(51575...
沪深300ETF天弘(5153... 7月2日,沪深300ETF天弘(515330)开盘涨0.00%,报1.116元。沪深300ETF天弘...
芯片ETF(159995)开盘... 7月2日,芯片ETF(159995)开盘跌0.16%,报1.218元。芯片ETF(159995)重仓...
证券ETF龙头(159993)... 7月2日,证券ETF龙头(159993)开盘涨0.17%,报1.205元。证券ETF龙头(15999...
红利低波50ETF(51545... 7月2日,红利低波50ETF(515450)开盘涨0.00%,报1.468元。红利低波50ETF(5...
红利ETF博时(515890)... 7月2日,红利ETF博时(515890)开盘跌0.28%,报1.408元。红利ETF博时(51589...