Molecule:使用Jetpack Compose构建StateFlow流

42 篇文章 1 订阅
文章介绍了如何在JetpackCompose中使用StateFlow实现响应式编程,特别是通过@Composable注解实现UI更新。当Message数据改变时,Text组件自动更新。此外,文章提到了Molecule库,它能将Composable函数转换为Flow或StateFlow,使得在非Composable上下文中也能利用到JetpackCompose的响应式能力。Molecule提供了moleculeFlow和launchMolecule函数,允许在不同重组行为下保持代码的反应性。
摘要由CSDN通过智能技术生成

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<Message> Flow<Message> MessageCard() Observable<View> Flow<View>
最重要的是提供了composable类型的Kotlin Flow API,例如 StateFlow<T>.collectAsState: State<T>
代码示例如下:

@Composable
fun profilePresenter(
  userFlow: Flow<User>,
  balanceFlow: Flow<Long>,
): 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 <T> moleculeFlow(
 clock: RecompositionClock,
 body: @Composable () -> T,
): Flow<T>

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值