📖 PrzeglądOverview

Moduł Onboarding umożliwia tworzenie flow onboardingowych z różnymi typami kroków: informacyjne, uprawnienia, wybory, GDPR i custom views.The Onboarding module enables creating onboarding flows with various step types: informational, permissions, choices, GDPR, and custom views.

Szybki przykładQuick Example
// Definiowanie flow
ADict.Onboarding.create("main") {
    step("welcome") {
        title = "Witaj!"
        description = "Zapraszamy do naszej aplikacji"
        layout = R.layout.onboarding_welcome
    }
    step("permissions") {
        type = StepType.PERMISSIONS
        title = "Powiadomienia"
        permissions = listOf(Manifest.permission.POST_NOTIFICATIONS)
    }
}

// Pokazanie
ADict.Onboarding.showIfNotCompleted("main", activity)

📦 TypyTypes kroków

TypTypeOpisDescription
INFOKrok informacyjny z tekstem/obrazem
PERMISSIONSProśba o uprawnieniaPermission request
CHOICEWybór preferencji (quiz/personalizacja)Preference selection (quiz/personalization)
GDPRAutomatyczne wyświetlenie formularza GDPRAutomatic GDPR form display
CUSTOMWłasny view z viewFactoryCustom view with viewFactory

📝 Tworzenie flow

create(id: String, config: FlowBuilder.() -> Unit)

Utwórz nowy flow onboardingowy.Create a new onboarding flow.

Kompletny przykładComplete Example
ADict.Onboarding.create("main_onboarding") {
    // Ustawienia flow
    showProgressIndicator(true)
    allowBack(true)

    // Krok 1: Powitanie
    step("welcome") {
        type = StepType.INFO
        title = "Witaj w MyApp!"
        subtitle = "Najlepsza aplikacja do..."
        description = "Przeprowadzimy Cię przez podstawowe funkcje"
        imageRes = R.drawable.onboarding_welcome
        buttonText = "Zaczynamy"
        canSkip = false
    }

    // Krok 2: Uprawnienia
    step("notifications") {
        type = StepType.PERMISSIONS
        title = "Bądź na bieżąco"
        description = "Włącz powiadomienia, by nie przegapić ważnych informacji"
        permissions = listOf(Manifest.permission.POST_NOTIFICATIONS)
        permissionRationale = "Powiadomienia pozwolą Ci..."
        canSkip = true
        skipButtonText = "Później"
    }

    // Krok 3: Preferencje
    step("interests") {
        type = StepType.CHOICE
        title = "Co Cię interesuje?"
        description = "Wybierz tematy, które chcesz śledzić"
        choices = listOf("Sport", "Technologia", "Muzyka", "Film", "Podróże")
        multiSelect = true
        minSelections = 1
        onChoiceSelected = { selected ->
            saveUserInterests(selected)
        }
    }

    // Krok 4: GDPR (tylko jeśli wymagane)
    step("gdpr") {
        type = StepType.GDPR
        showOnlyIfRequired = true
    }

    // Krok 5: Custom
    step("custom_step") {
        type = StepType.CUSTOM
        title = "Personalizacja"
        viewFactory = { context ->
            MyCustomOnboardingView(context)
        }
        customValidator = {
            // Zwróć true jeśli można przejść dalej
            isCustomStepValid()
        }
    }

    // Callback na zakończenie
    onComplete { result ->
        when (result) {
            is OnboardingResult.Completed -> {
                ADict.Analytics.log("onboarding_completed")
                navigateToHome()
            }
            is OnboardingResult.Skipped -> {
                ADict.Analytics.log("onboarding_skipped", "step" to result.atStep)
            }
            is OnboardingResult.Cancelled -> {
                ADict.Analytics.log("onboarding_cancelled")
            }
        }
    }
}

▶️ Pokazywanie

show(flowId: String, activity: Activity, onResult?)

Pokaż onboarding.Show onboarding.

showIfNotCompleted(flowId: String, activity: Activity, onResult?): Boolean

Pokaż tylko jeśli nie był jeszcze ukończony. ZwracaReturns true jeśli pokazano.

isCompleted(flowId: String): Boolean

Sprawdź czy flow został ukończony.Check if flow was completed.

markCompleted(flowId: String)

Ręcznie oznacz jako ukończony.Manually mark as completed.

reset(flowId: String)

Zresetuj status ukończenia.Reset completion status.

🔧 StepBuilder properties

PropertyTypTypeOpisDescription
typeStepTypTypeeTyp kroku
titleStringTytułTitle
subtitleStringPodtytułSubtitle
descriptionStringOpisDescription
layoutInt?@LayoutRes custom layout
imageResInt?@DrawableRes obrazek
animationResInt?Lottie animation
canSkipBooleanCzy można pominąćWhether can be skipped
buttonTextStringTekst przycisku głównegoMain button text
skipButtonTextStringTekst przycisku pomińSkip button text
permissionsList<String>Lista uprawnieńPermissions list
choicesList<String>Opcje wyboru
multiSelectBooleanMulti-select dla CHOICE
minSelectionsIntMin. wyborów
viewFactory((Context) -> View)?Factory dla CUSTOM
onStepShown((View) -> Unit)?Callback po pokazaniu
onStepCompleted(() -> Unit)?Callback po ukończeniuCallback after completion
customValidator(() -> Boolean)?Walidator custom step

📦 OnboardingResult

sealed class OnboardingResult

  • Completed(flowId, data)Ukończony z zebranymi danymiCompleted with collected data
  • Skipped(flowId, atStep)Pominięty na konkretnym krokuSkipped at specific step
  • Cancelled(flowId)Anulowany