Skip to content

Instantly share code, notes, and snippets.

val ChaosDark = Color(0xFF0D0D0D)
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
@Composable
fun ChaosButton(
text: String,
modifier: Modifier = Modifier,
useV2: Boolean = true,
backgroundColor: Color = ChaosDark,
textColor: Color = Color.White,
@ExperimentalCoroutinesApi
@RunWith(MockitoJUnitRunner::class)
class MainViewModelTest {
@Mock
lateinit var getTodos: IGetTodosUseCase
private lateinit var viewModel: MainViewModel
@get:Rule
interface TimeCapsule<S : UiState> {
fun addState(state: S)
fun selectState(position: Int)
fun getStates(): List<S>
}
class TimeTravelCapsule<S : UiState>(
private val onStateSelected: (S) -> Unit
) : TimeCapsule<S> {
sealed class MainScreenDialogState() {
object None: MainScreenDialogState()
object ShowAddItemDialogState: MainScreenDialogState()
object ShowDeleteItemDialogState: MainScreenDialogState()
}
data class MainScreenState {
...
val dialogState = MainScreenDialogState.None
...
@Composable
fun MainScreen(
viewModel: MainViewModel
) {
val state by viewModel.state.collectAsState()
Column {
//Render toolbar
Toolbar(viewModel.timeMachine)
//Render screen content
@HiltViewModel
class MainViewModel @Inject constructor(
private val getTodos: IGetTodosUseCase,
private val dispatcher: CoroutineDispatcher,
private val viewMapper: MainScreenViewDataMapper,
) : BaseViewModel<MainScreenState, MainScreenUiEvent>() {
private val reducer = MainReducer(MainScreenState.initial())
override val state: StateFlow<MainScreenState>
@Immutable
sealed class MainScreenUiEvent : UiEvent {
data class ShowData(val items: List<MainScreenItem>) : MainScreenUiEvent()
data class OnChangeDialogState(val show: Boolean) : MainScreenUiEvent()
data class AddNewItem(val text: String) : MainScreenUiEvent()
data class OnItemCheckedChanged(val index: Int, val isChecked: Boolean) : MainScreenUiEvent()
object DismissDialog : MainScreenUiEvent()
}
@Immutable
//Not ok
sealed class MyState {
object ShowProgressBar: MyState()
data class ShowDataWithError(val error: Throwable?, val data: List<Item>): MyState()
}
//Good
data class MyState(
val isShowProgress: Boolean = false,
val error: Throwable? = null,
val data: List<Item>
sealed class MyState {
object ShowProgressBar: MyState()
data class ShowDataWithError(val error: Throwable?, val data: List<Item>): MyState()
}
sealed class MyState {
object ShowProgressBar: MyState()
data class ShowError(val error: Throwable): MyState()
data class ShowListOfData(val data: List<Item>): MyState()
}