Skip to content

Cards

Implements a dating-cards-like mechanism.

Intended only as an illustration, but it should be easy enough to tailor it to your needs if you find it useful.

Where can I find this NavModel?

The Cards NavModel is not currently published, however you can try it in :samples:app. Launch the sample app and check the Dating cards NavModel item to see it in action.

States

sealed class State {
    data class Queued(val queueNumber: Int) : State()
    object Bottom : State()
    object Top : State()
    object IndicateLike : State()
    object IndicatePass : State()
    object VoteLike : State()
    object VotePass : State()
}

State transitions

Constructing Cards

Requires defining items that will be converted to profile cards. The first one in the list will become a Top card, the second one a Bottom card, the rest will be Queued.

class Cards<NavTarget : Any>(
    initialItems: List<NavTarget> = listOf(),
) : BaseNavModel<NavTarget, State>(
    screenResolver = CardsOnScreenResolver,
    finalStates = FINAL_STATES,
    savedStateMap = null
) {
    companion object {
        internal val FINAL_STATES = setOf(VoteLike, VotePass)
        internal val TOP_STATES = setOf(Top, IndicateLike, IndicatePass)
    }
}

Default on screen resolution

internal object CardsOnScreenResolver : OnScreenStateResolver<State> {
    override fun isOnScreen(state: State): Boolean =
        when (state) {
            is State.Bottom,
            is State.Top,
            is State.IndicateLike,
            is State.IndicatePass -> true
            is State.Queued,
            is State.VoteLike,
            is State.VotePass -> false
        }
}

Default transition handlers

CardsTransitionHandler

rememberCardsTransitionHandler()

Adds scale-up, swipe and rotation animations.

Operations

PromoteAll

Internal operation. Automatically invoked whenever a top card is moved to a vote-related state. Causes all other cards to come forward in the queue, become the Bottom card, then the Top card.

IndicateLike, IndicatePass, VoteLike, VotePass

Transitions the Top card directly to these states.