FlowFrame
FlowFrame gives onboarding, pairing, setup, and guided tasks a shared layout for
safe areas, keyboard avoidance, optional step progress, and back navigation. It
does not own routes, step state, persistence, or form controls.
<FlowFrame
title="Add a device"
currentStep={2}
totalSteps={4}
onBack={() => navigation.goBack()}
footer={<Button onPress={continueSetup}>Continue</Button>}
>
<FlatList data={items} renderItem={renderItem} />
</FlowFrame>
The content region is not wrapped in a ScrollView, so it can contain a
ScrollView, FlatList, or another screen-owned scrolling view without nested
scroll containers. Give a scrollable child style={{ flex: 1 }} when it should
fill the available space. Safe-area edges default to all four sides and can be
overridden when the host shell already handles some edges. The frame uses
React Native's KeyboardAvoidingView; choose keyboardBehavior and
keyboardVerticalOffset to match the host navigation header.
On Android, the hardware back button calls onBack when it is supplied. Return
false from the callback to let the host navigation handler continue; omit
onBack or set handleAndroidBack={false} to leave the hardware action to the
host. The visible back button calls the same callback.
Props
title?: string,header?: ReactNode, andfooter?: ReactNode— host-owned content around the flow body.children?: ReactNode— the active step; scrolling remains owned by the child.currentStep?: numberandtotalSteps?: number— optional 1-based progress. The progress indicator is rendered only when both are positive integers and is clamped to the supplied range.onBack?: () => boolean | void— visible back action and Android hardware back handling. Returningfalseallows Android back handling to continue.backLabel?: string— accessible label and visible text for the back button.safeAreaEdges?: Edge[]— edges managed by the safe-area context; defaults to top, right, bottom, and left.keyboardBehavior?: "height" | "position" | "padding"andkeyboardVerticalOffset?: number— keyboard avoidance configuration.handleAndroidBack?: boolean— defaults totruewhenonBackis supplied.progressAccessibilityLabel?: string,contentStyle?,style?,testID?,theme?, andslots?— accessibility, styling, and shared UI theme/slot props.
Import from @ovok/native/ui or the package's main entry point.