Skip to content

jangramukul/Reactive-Store

Repository files navigation

Reactive-Store

Reactive Store library is an easy reactive solution to state management problems in android development.

alt text

Reactive State in 3 Steps

  1. Define Reactive Store
internal interface HomeEvent : Event {
    data class InsertUsers(val users: List<User>) : HomeEvent
    data class RemoveUser(val id: Int) : HomeEvent
    data class ChangeName(val name: String) : HomeEvent
}

internal data class HomeState(
    val isLoading: Boolean,
    val users: List<User>
) : State {
    companion object {
        val Idle = HomeState(
            isLoading = false,
            users = listOf()
        )
    }
}

internal class HomeReducer : Reducer<HomeState, HomeEvent> {
    override fun invoke(store: Store<HomeState, HomeEvent>, event: HomeEvent): HomeState {
        return when (event) {
            is HomeEvent.InsertUsers -> {
                val users = store.state().users
                store.state().copy(users = users + event.users)
            }
            is HomeEvent.RemoveUser -> {
                val users = store.state().users.toMutableList()
                users.removeIf { it.id == event.id }
                store.state().copy(users = users)
            }
            is HomeEvent.ChangeName -> {
                store.state().copy(
                    users = listOf(
                        User(
                            id = 1,
                            name = event.name
                        )
                    )
                )
            }
            else -> store.state()
        }
    }
}

internal class HomeStore : Store<HomeState, HomeEvent>(
    initialState = HomeState.Idle,
    reducer = HomeReducer(),
)
  1. Define and Dispatch
class HomeViewModel() : ViewModel() {
    private val store = getStore(default = HomeStore())
    
    fun getUsers() {
       val users = api.getUsers()
       val event = HomeEvent.ChangeUsers(users = users)
       store.dispatch(event)
    }
}    
  1. Consume State
class MainActivity : AppCompatActivity() {
    private val store = getStore(default = HomeStore())
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        consumeState(store) { state -> 
           //ui.render()
        }
    }
}

Add Reactive-Store to your project

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

allprojects {
   repositories {
       //...
       maven { url 'https://jitpack.io' }
   }
}

Step 2. Add the dependency

dependencies {
    implementation 'com.github.mukuljangir372:Reactive-Store:v1.4'
}

About

Reactive Store library is an easy reactive solution to state management problems in android.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages