馃摉 Przegl膮d

Modu艂 Onboarding umo偶liwia tworzenie flow onboardingowych z r贸偶nymi typami krok贸w: informacyjne, uprawnienia, wybory, GDPR i custom views.

Szybki przyk艂ad
// 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)

馃摝 Typy krok贸w

TypOpis
INFOKrok informacyjny z tekstem/obrazem
PERMISSIONSPro艣ba o uprawnienia
CHOICEWyb贸r preferencji (quiz/personalizacja)
GDPRAutomatyczne wy艣wietlenie formularza GDPR
CUSTOMW艂asny view z viewFactory

馃摑 Tworzenie flow

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

Utw贸rz nowy flow onboardingowy.

Kompletny przyk艂ad
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.

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

Poka偶 tylko je艣li nie by艂 jeszcze uko艅czony. Zwraca true je艣li pokazano.

isCompleted(flowId: String): Boolean

Sprawd藕 czy flow zosta艂 uko艅czony.

markCompleted(flowId: String)

R臋cznie oznacz jako uko艅czony.

reset(flowId: String)

Zresetuj status uko艅czenia.

馃敡 StepBuilder properties

PropertyTypOpis
typeStepTypeTyp kroku
titleStringTytu艂
subtitleStringPodtytu艂
descriptionStringOpis
layoutInt?@LayoutRes custom layout
imageResInt?@DrawableRes obrazek
animationResInt?Lottie animation
canSkipBooleanCzy mo偶na pomin膮膰
buttonTextStringTekst przycisku g艂贸wnego
skipButtonTextStringTekst przycisku pomi艅
permissionsList<String>Lista uprawnie艅
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艅czeniu
customValidator(() -> Boolean)?Walidator custom step

馃摝 OnboardingResult

sealed class OnboardingResult

  • Completed(flowId, data)Uko艅czony z zebranymi danymi
  • Skipped(flowId, atStep)Pomini臋ty na konkretnym kroku
  • Cancelled(flowId)Anulowany