项目介绍:FlowRedux
FlowRedux 是一个强大的 Kotlin 多平台状态机库,旨在让异步运行变得简单。通过使用领域特定语言 (DSL) 和协程,它能够轻松管理应用程序的状态转换。
使用方法
FlowRedux 提供了一种直观的方式来定义和处理应用程序的状态。开发者可以使用状态类和状态转换机制来处理不同的用户操作。
状态与操作
在 FlowRedux 中,状态和操作是通过接口和对象定义的。例如:
sealed interface State
object Loading : State
data class ContentState(val items : List<Item>) : State
data class Error(val error : Throwable) : State
以上代码展示了三种状态:加载中、内容加载完成和错误状态。
对于操作,也可以使用类似的方式定义:
sealed interface Action
object RetryLoadingAction : Action
状态机定义
FlowRedux 允许开发者通过 FlowReduxStateMachine 来定义状态机和状态间的转换逻辑。以下是一个简单的例子:
class MyStateMachine : FlowReduxStateMachine<State, Action>(initialState = Loading){
init {
spec {
inState<Loading> {
onEnter { state : State<Loading> ->
try {
val items = loadItems() // 加载数据
state.override { ContentState(items) } // 转换到内容状态
} catch (t : Throwable) {
state.override { Error(t) } // 转换到错误状态
}
}
}
inState<Error> {
on<RetryLoadingAction> { action : RetryLoadingAction, state : State<Error> ->
state.override { Loading } // 重新加载时进入加载状态
}
}
inState<ContentState> {
collectWhileInState( flowOf(1,2,3) ) { value : Int, state : State<ContentState> ->
state.mutate {
copy( items = this.items + Item("New item $value"))
}
}
}
}
}
}
与 Android 应用的集成
FlowRedux 可以轻松集成到 Android 应用中,并与 AndroidX ViewModel
结合使用:
class MyViewModel @Inject constructor(private val stateMachine : MyStateMachine) : ViewModel() {
val state = MutableLiveData<State>()
init {
viewModelScope.launch {
stateMachine.state.collect { newState ->
state.value = newState
}
}
}
fun dispatch(action : Action) {
viewModelScope.launch {
stateMachine.dispatch(action)
}
}
}
依赖设置
开发者可以通过添加以下依赖来使用 FlowRedux:
- 核心库:
flowredux
- Jetpack Compose 扩展:
compose
JVM / Android
implementation 'com.freeletics.flowredux:flowredux-jvm:<latest-version>'
implementation 'com.freeletics.flowredux:compose:<latest-version>'
多平台支持
FlowRedux 不仅支持 JVM 和 Android,还可以在 iOS、watchOS、tvOS、macOS、Linux 和 Windows 平台上运行。
implementation 'com.freeletics.flowredux:flowredux:<latest-version>'
代码快照
最新的快照可以通过以下方式获取:
allprojects {
repositories {
// 添加代码快照仓库
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
}
并使用 -SNAPSHOT
后缀作为版本名:
implementation 'com.freeletics.flowredux:flowredux:1.2.1-SNAPSHOT'
总之,FlowRedux 是一个易于使用且功能强大的工具,帮助开发者在多平台应用中管理复杂的异步状态转换。通过其优雅的 Kotlin DSL 和强大的协程支持,开发者可以构建更具响应性和可靠性的应用。