safaeh library
Opt-in Safaeh presentation helpers for the settings framework.
The main package entrypoint intentionally does not export this library. Import it when the host app wants to use Safaeh's page-index, search, adaptive modal chrome, or the 0.5 list/status/theme seams:
import 'package:flutter_settings_framework/safaeh.dart';
Classes
- SafaehAccentStyle
- Appearance preference: tone down decorative accent fills.
- SafaehAccentSurfaces
- Shared decorations for bordered panels and accent heroes.
-
SafaehAction<
T> - One row for showSafaehActionSheet.
-
SafaehActionSheetBody<
T> - Action list used by showSafaehActionSheet.
-
SafaehAnchoredDropdownChip<
T> - A compact chip that opens an anchored menu below the trigger.
- SafaehAsyncBody
- Generic loading / error / empty / data switcher.
- SafaehAuthActions
- Host callbacks for the generic auth presentation.
- SafaehAuthCredentials
- SafaehAuthFlow
- Generic sign-in/signup presentation with no account or network knowledge.
- SafaehAuthLabels
- Copy supplied by the host. Safaeh deliberately has no localization dependency and uses these English values only as a usable fallback.
- SafaehAuthProfile
- SafaehAuthSnapshot
- SafaehBorderedListChrome
- Shared Material + outline shell for list cards.
- FAB location that lifts a base location above the shell's visual inset.
- Shared geometry for a floating bottom navigation bar and the content or controls that need to sit above it.
- Provides bottom-navigation geometry to a shell's descendants.
- SafaehCameraSheet
- Handle for compact↔full camera / QR chrome.
- SafaehCameraSheetHost
- Paper-roll camera chrome. Use showSafaehCameraSheet for a dialog, or embed this widget on a route (pass onDismiss, omit openAnimation).
- SafaehConfirmSheet
- Confirmation body used by showSafaehConfirm.
- SafaehContentAlignedAppBar
- An app bar that places title in a horizontal content band.
- SafaehContentAlignedFabLocation
- Positions the scaffold FAB beside a content band on wide layouts.
- SafaehContentAlignedPage
- Wraps builder so SafaehContentAlignedAppBar can receive the scaffold width from a LayoutBuilder.
- SafaehContentBand
- Centers child at maxWidth (or SafaehThemeData.contentMaxWidth).
- SafaehContentPanel
- Inset surface for explanatory copy and compact form controls.
- SafaehDebugAction
- Dense list-row action inside a SafaehDebugSection.
- SafaehDebugActionTile
- Dense list-row action.
- SafaehDebugChip
- Selectable status chip.
- SafaehDebugGroupLabel
- Section subsection label.
- SafaehDebugIdentityCard
- Package / version header.
- SafaehDebugL10nSection
- Built-in localization section for a SafaehL10nBackend.
- SafaehDebugMenuBody
- Scrollable debug menu body used by showSafaehDebugMenu and hosts that already wrap showSafaeh.
- SafaehDebugMenuFab
- Draggable bug FAB. Host decides visibility; tap opens via onOpen.
- SafaehDebugQuickAction
- Tile in SafaehDebugQuickActionGrid.
- SafaehDebugQuickActionGrid
- 2–3 column quick-action tiles.
- SafaehDebugQuickActionTile
- One tile in SafaehDebugQuickActionGrid.
- SafaehDebugSection
- One expandable section in showSafaehDebugMenu.
- SafaehDebugSectionCard
- Expandable section card.
- SafaehDebugSnapshotCard
- Snapshot blurb.
- SafaehDebugStatusBanner
- Bottom status message.
- SafaehDebugStatusChip
- Small status pill.
-
SafaehDropdownOption<
T> - One row in a SafaehAnchoredDropdownChip menu.
- SafaehEmptyState
- Centered empty list/page: icon, title, optional subtitle and one action.
- SafaehEndAsideLayout
- Places aside in the end gutter of a centered content band.
- SafaehErrorBody
- Shared error content for async / error states.
- SafaehFeedbackHost
- Mounts the shared feedback overlay and its placement policy.
- SafaehFeedbackSurface
- Shared feedback surface used by the built-in and custom message APIs.
- SafaehFloatingAppearance
- Shared appearance options for Safaeh floating surfaces.
- Phone floating destination bar. Reuses SafaehSidenavDestination.
- SafaehGlyphAvatar
- Circle (or rounded-square) glyph for groups, senders, and list leadings.
- SafaehInfoSheet
- Body used by showSafaehInfo.
- SafaehInlineBanner
- Inline message block used inside sheets, above or below a form.
- Hides a floating nav bar while the keyboard is visible.
- SafaehKpiCard
- Compact label + value tile used on analytics and profile summaries.
- SafaehL10nBackend
- Host i18n engine + bundled maps.
- SafaehL10nEditorLabels
- Host-supplied copy for the localization editor and debug section.
- SafaehL10nEditOverlay
- Long-press wrapper that opens the localization editor.
- SafaehL10nOverrideStore
- Pure-Dart flatten / merge / reverse-lookup store.
- SafaehL10nPersistence
- Persistence for SafaehL10nOverrideStore.
- SafaehLayoutFollowingFabAnimator
- Follows responsive layout offsets without replaying Scaffold's relocation scale and rotation.
- SafaehLoadingBody
- Centered spinner used as the default SafaehAsyncBody loading slot.
- SafaehLtrText
- Pre-formatted string with forced LTR so number/currency order stays stable inside RTL UI shells.
- SafaehMaterialRadii
- Radii and chrome metrics passed to applySafaehMaterialChrome.
- SafaehMemoryL10nPersistence
- In-memory persistence used by tests and the example catalog.
- SafaehMetaChip
- Compact icon+label pill used on tiles, summaries, and filters.
- SafaehMorphingAppBar
- An app bar whose title and host-provided chrome follow a page position.
- SafaehMorphingAppBarAction
- Fades a page-specific action in and out around targetPage.
- SafaehMorphingAppBarBottom
- A bottom app-bar child whose height and opacity follow a normalized factor.
- Which navigator safaehPop uses. showSafaeh / dialog / camera set this.
- SafaehOnboarding
- A reusable onboarding shell with six complete visual directions.
- SafaehOnboardingActionBar
- Public action bar. It can be mounted independently in a host flow.
- SafaehOnboardingDesignCatalog
- Design metadata shipped by Safaeh itself.
- SafaehOnboardingDesignInfo
- Public metadata for a design picker or documentation catalog.
- SafaehOnboardingDesignPreview
- Small public preview card used by the design catalog.
- SafaehOnboardingHostActions
- Host-controlled actions and optional top/bottom controls.
- SafaehOnboardingLabels
- Localized labels for the onboarding chrome.
- SafaehOnboardingList
- A design-aware list of option rows for host step content.
- SafaehOnboardingListItem
- One design-aware list row for onboarding choices or permissions.
- SafaehOnboardingStep
- A host-owned onboarding step.
- SafaehOnboardingTracker
- Public progress tracker. Hosts can use it outside SafaehOnboarding.
-
SafaehOption<
T> - One card in showSafaehPicker.
- SafaehOptionList
- Vertical list of option rows with consistent gaps.
-
SafaehOptionPickerBody<
T> - Card-picker body: optional in-body title, option cards, footer.
- SafaehOptionTile
- Bordered ink row for sheet action / picker lists.
- SafaehPageIndex
- GitBook-style "On this page" index for wide layouts (side rail).
- SafaehPageIndexEntry
- One jump target in a long scrolling page.
- SafaehPageIndexOverlay
- Floating overlay control for narrow layouts. Does not consume scroll space.
- SafaehPhoneCenterExtent
- Grows a bottom-docked phone sheet so the vertical center of the first body block after the handle aligns with the vertical center of the viewport. Pass-through when enabled is false.
- SafaehQrFramePainter
- Dimmed viewfinder with corner brackets and a scanning line.
- SafaehQrMessageBody
- Centered status copy for permission / camera-unavailable.
- SafaehQrScannerOverlay
- Overlay chrome for a camera QR preview: viewfinder, success wash, top bar, optional hint. Preview and decode stay in the host app.
- SafaehQrTopBar
- Close, title, optional torch, expand/collapse.
- SafaehRouteOptions
- Shared size / motion / navigator knobs for showSafaeh and wrappers.
- SafaehSectionHeader
- Accent-bar section title used across lists, forms, and tabs.
- SafaehSettingsPageIndex
- Safaeh's wide-layout page index backed by Edadat sections.
- SafaehSettingsPageIndexOverlay
- Safaeh's narrow-layout page-index overlay backed by Edadat sections.
- SafaehSettingsSearchButton
- Search trigger for a Safaeh-backed settings search overlay.
- SafaehSettingsSearchOverlay
- Animated, glass-surface settings search overlay for a page Stack.
- SafaehSettingsSearchResults
- A compact, grouped result list for SafaehSettingsSearchOverlay.
- Temporary drawer (mid), clipping rail (desktop), or overlay rail.
- Circular plate used as the default SafaehSidenavProfile leading.
- One shell destination in SafaehSidenav.
- Profile / account row at the bottom of SafaehSidenav.
- SafaehStatusBody
- Centered empty / busy / error chrome for sheets and bands.
- SafaehTextInputSheet
- Text field + action row used by showSafaehTextInput.
- SafaehTheme
- Provides SafaehThemeData to sheets, page index, and sidenav.
- SafaehThemeData
- Tokens for safaeh chrome. Override via SafaehTheme at the app root.
-
SafaehTileOption<
T> - One list row in showSafaehTilePicker.
-
SafaehTilePickerBody<
T> - List-row picker body: optional in-body title, header, SafaehOptionList.
- SafaehTimedConfirmSheet
- Confirmation whose primary action stays disabled until seconds elapse.
- SafaehUserText
-
Displays user-generated text with a content-based
textDirectionso truncation / ellipsis follow the script order rather than only the UI locale. - SheetHandleBar
- Top grabber for expandable black sheets (receipt camera / invite scanner).
- SheetHandleDrag
- Shared drag math for compact↔full camera / QR sheets (+ dismiss).
Enums
- SafaehAuthMode
- Visual/authentication state supplied by the host adapter.
- SafaehAuthProvider
- Provider buttons a host can expose in SafaehAuthFlow.
- SafaehBannerTone
- Severity of a SafaehInlineBanner, which picks its colours and default icon.
- SafaehFeedbackType
- The visual meaning of a Safaeh feedback message.
- SafaehFloatingSurfaceStyle
- Visual treatment used by floating and overlay surfaces.
- SafaehOnboardingControlPlacement
- Placement of host-provided language and theme controls.
- SafaehOnboardingDesign
- Complete visual directions available to every Safaeh consumer.
- SafaehOnboardingResult
- Result returned by the host completion callback.
- SafaehOnboardingSkipPlacement
- Placement of the optional skip action.
- SafaehOnboardingTrackerStyle
- Visual treatment for the onboarding page indicator.
- SafaehPhoneSheetPlacement
- Where a phone sheet sits. Tablet+ dialogs stay centered.
- SheetHandleDragAction
- Result of releasing the sheet drag handle.
Extensions
- SafaehAccentStyleContext on BuildContext
- SafaehFeedbackContext on BuildContext
- Shared toast operations exposed through a small, app-agnostic interface.
- SafaehOnboardingDesignX on SafaehOnboardingDesign
- SafaehOnboardingSkipPlacementX on SafaehOnboardingSkipPlacement
- SafaehSemanticStatus on ColorScheme
- Theme-aware success / warning / danger colors.
Constants
- kSafaehCameraCompactHeightFraction → const double
- Compact fraction of screen height for camera / QR sheets (60–70% band).
- kSafaehPhoneCenterFirstContentAnchor → const double
-
Fraction of the first body block that lines up with the viewport center
(
1 / 2= center-to-center). - kSafaehPhoneCenterMinTopInset → const double
- Smallest gap allowed above a raised phone sheet.
- kSafaehPhoneFirstContentFallbackHeight → const double
- First-content height used before the first layout measurement.
- kSafaehPhoneHandleFallbackHeight → const double
- Handle height used before the first layout measurement.
- kSafaehSheetPadding → const double
- kSafaehTimedConfirmSeconds → const int
- Default countdown before an irreversible action can be confirmed.
- kSheetContentPadding → const EdgeInsets
- Default inset for free-form sheet bodies.
Functions
-
activeSafaehSettingsSectionId(
{required Iterable< SettingSection> sections, required Map<String, GlobalKey< sectionKeys, required BuildContext scrollContext, double activationOffset = 96}) → String?State< >StatefulWidget> > - Resolves the active Edadat section using Safaeh's scroll spy.
-
applySafaehMaterialChrome(
ThemeData theme, {required ColorScheme colorScheme, required TextTheme textTheme, required Color dividerColor, required Color outlineColor, required Color errorColor, required Color primarySeed, Color? iconColor, bool alwaysShowScrollbars = false, PageTransitionsTheme? pageTransitionsTheme, SafaehMaterialRadii radii = const SafaehMaterialRadii()}) → ThemeData - Material chrome shared by host theme factories.
-
buildSafaehSheetShell(
{required Widget body, List< Widget> actions = const [], Widget? title, bool showTitleInBody = true, double padding = kSafaehSheetPadding}) → Widget - Shared sheet body: optional in-body title, content, action row.
-
safaehActivePageSectionId(
{required List< (String, GlobalKey< sections, required BuildContext scrollContext, double activationOffset = 96}) → String?State< )>StatefulWidget> > - Resolve the active section from scroll position (section tops vs viewport).
-
safaehArrowBack(
BuildContext context) → IconData - Back arrow that points toward the start.
-
safaehBandMetrics(
{required double contentAreaWidth, required double maxWidth, double reservedStartWidth = 0}) → ({double bandWidth, double endFree, double leftOffset}) -
Centers a capped content band inside
contentAreaWidth. -
safaehCanShowAside(
BuildContext context, double contentAreaWidth, {double asideMinGutter = 176}) → bool - Whether there is enough end-gutter space for a content aside rail.
-
safaehChevronEnd(
BuildContext context) → IconData - Material chevrons and back arrows already set IconData.matchTextDirection. Keep the LTR glyph. Swapping to the opposite icon in RTL mirrors twice. Chevron pointing toward the end (forward / open).
-
safaehChevronStart(
BuildContext context) → IconData - Chevron pointing toward the start (back / collapse into the rail).
-
safaehCollectPlainTextsAt(
BuildContext context, Offset globalPosition) → List< String> -
Collects plain RenderParagraph strings under
globalPosition. -
safaehCurveFor(
BuildContext context, Animation< double> animation) → Curve -
SafaehThemeData.enterCurve while opening,
exitCurvewhile reversing. -
safaehElideGraphemes(
String text, {required int maxGraphemes, String ellipsis = '…', bool trimInput = true}) → String - Grapheme-safe hard elide (emoji / ZWJ / flags stay intact).
-
safaehFade(
{required Animation< double> animation, required Widget child}) → Widget - Fade-only enter / exit.
-
safaehFadeScale(
{required Animation< double> animation, required Widget child}) → Widget - Default tablet dialog enter: fade + slight scale.
-
safaehIsolateBidi(
String text) → String -
Unicode FSI (U+2068) / PDI (U+2069): isolate user-generated content inside
mixed-direction strings (e.g.
"$title – $amount", translated templates). -
safaehPhoneCenterSheetHeight(
{required double viewportHeight, required double sheetTop}) → double -
Height of a bottom-flush raised sheet for a computed
sheetTop. -
safaehPhoneCenterSheetTop(
{required double viewportHeight, required double handleHeight, required double firstContentHeight, double minTopInset = kSafaehPhoneCenterMinTopInset, double minSheetHeight = 0, double maxSheetHeight = double.infinity}) → double - Top of a bottom-docked raised sheet.
-
safaehPop<
T> (BuildContext context, [T? result]) → void - Pops the navigator that opened the current Safaeh route.
-
safaehRailAwareBandMetrics(
BuildContext context, double contentAreaWidth) → ({double bandWidth, double endFree, double leftOffset}) -
Centers a content band in the full viewport while a sibling shell
rail eats
contentAreaWidthfrom one side. -
safaehResolvedMotion(
BuildContext context, Duration motion) → Duration - Zero when the platform has asked to disable animations.
-
safaehResolveUiStartTextAlign(
TextDirection uiDirection) → TextAlign - Align UGC to the ambient UI start edge (right in RTL, left in LTR).
-
safaehResolveUserTextDirection(
String text) → TextDirection? - Base direction for standalone UGC so truncation ellipsis follows the content's script, not only the ambient UI locale.
-
safaehSettingsPageIndexEntries(
{required Iterable< SettingSection> sections, required Map<String, GlobalKey< sectionKeys, required String labelBuilder(SettingSection section)}) → List<State< >StatefulWidget> >SafaehPageIndexEntry> - Converts Edadat sections into Safaeh page-index entries.
- Initials for SafaehSidenavAvatar: first letters of the first two words, or the first character of a single token (CJK / one-word names).
-
safaehTitleFromLabel(
String data, SafaehLabelBuilder builder) → SafaehTitleBuilder - Reuses a SafaehLabelBuilder on a sheet title.
-
safaehUnwrapBidiIsolates(
String text) → String - Strip bidi isolates for equality / test helpers.
-
scaleSafaehTextTheme(
TextTheme baseTextTheme, double scaleFactor) → TextTheme - Shared text scale used by host theme builders.
-
scrollToPageSection(
GlobalKey< State< key, {double alignment = 0.08, ScrollController? controller, double? knownOffset, Duration ensureDuration = const Duration(milliseconds: 280)}) → Future<StatefulWidget> >void> - Scroll helper: jump to a section key inside one scrollable.
-
showSafaeh<
T> ({required BuildContext context, required Widget child, String? title, SafaehTitleBuilder? titleBuilder, Widget? tabletTopBarAction, double? maxWidth, double? maxHeight, bool useSafeArea = true, bool showDragHandle = true, bool enableDrag = true, ShapeBorder? sheetShape, bool barrierDismissible = true, EdgeInsetsGeometry? contentPadding, double? tabletBreakpoint, double? dialogMaxWidth, Duration? motion, Curve? enterCurve, Curve? exitCurve, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, T? dismissValue, String? dismissLabel, String? closeTooltip, bool paintPhoneTitle = true, SafaehFloatingAppearance? floatingAppearance, SafaehRouteOptions? route}) → Future< T?> -
Shows
childas a centered dialog on tablet+ and a bottom sheet on phone. -
showSafaehActionSheet<
T> ({required BuildContext context, required String title, required List< SafaehAction< actions, Widget? header, SafaehTitleBuilder? titleBuilder, SafaehActionTileBuilder<T> >T> ? tileBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, SafaehRouteOptions? route}) → Future<T?> - Action menu. Wide = dialog, phone = bottom sheet.
-
showSafaehCameraSheet<
T> ({required BuildContext context, required SafaehCameraSheetBuilder builder, double? compactHeightFraction, Color panelColor = Colors.black, Duration? motion, Duration? roll, Curve? enterCurve, Curve? exitCurve, double railWidthOf(BuildContext context)?, bool barrierDismissible = true, String? handleExpandLabel, String? handleCollapseLabel, String? handleDismissLabel, SafaehFloatingAppearance? floatingAppearance}) → Future< T?> - Opens a black paper-roll sheet (receipt camera / QR scanner).
-
showSafaehConfirm(
{required BuildContext context, required String title, required String content, required String confirmLabel, String? cancelLabel, bool isDestructive = false, bool dismissReturnsFalse = false, SafaehTitleBuilder? titleBuilder, SafaehTitleBuilder? contentBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, bool showTitleInBody = true, SafaehRouteOptions? route}) → Future< bool?> -
Adaptive confirm. Hosts pass every label — no
.tr()here. -
showSafaehDebugMenu<
T> (BuildContext context, {required String title, Widget? identity, required List< SafaehDebugSection> sections, String? statusMessage, List<Widget> leading = const []}) → Future<T?> - Opens a scrollable debug menu sheet.
-
showSafaehDialog<
T> ({required BuildContext context, required WidgetBuilder builder, bool barrierDismissible = true, Color? barrierColor, bool fadeScale = true, double railWidthOf(BuildContext context)?, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? transition, SafaehFloatingAppearance? floatingAppearance, SafaehRouteOptions? route}) → Future< T?> -
Centered dialog.
railWidthOfis accepted for API compatibility and does not shift the panel — floating dialogs stay in the full viewport. -
showSafaehInfo(
{required BuildContext context, required String title, required String content, required String primaryLabel, String? secondaryLabel, bool showSecondaryAction = true, SafaehTitleBuilder? titleBuilder, SafaehTitleBuilder? contentBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, SafaehRouteOptions? route}) → Future< bool?> - Informational modal with a content panel and a primary action.
-
showSafaehMultiTilePicker<
T> ({required BuildContext context, required List< SafaehTileOption< options, required String confirmLabel, String? cancelLabel, String? title, SafaehTitleBuilder? titleBuilder, Widget? header, Iterable<T> >T> ? selected, SafaehTileBuilder<T> ? tileBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, String? searchHint, String? searchEmptyLabel, SafaehTileSearchMatch<T> ? searchMatches, bool showTitleInBody = true, SafaehRouteOptions? route}) → Future<List< T> ?> -
List-row multi-select picker. Confirm pops the current List; dismiss
is
null. -
showSafaehPicker<
T> ({required BuildContext context, String? title, required List< SafaehOption< options, T? selected, SafaehTitleBuilder? titleBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, bool showTitleInBody = true, SafaehRouteOptions? route}) → Future<T> >T?> - Compact single-select picker. Wide = dialog, phone = bottom sheet.
-
showSafaehTextInput(
{required BuildContext context, required String title, required String doneLabel, String? hint, String initialValue = '', int maxLines = 1, int? maxLength, bool obscureText = false, TextInputType? keyboardType, TextInputAction? textInputAction, List< TextInputFormatter> ? inputFormatters, bool autocorrect = true, bool enableSuggestions = true, ValueChanged<String> ? onChanged, String? cancelLabel, SafaehTitleBuilder? titleBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, bool showTitleInBody = true, SafaehRouteOptions? route}) → Future<String?> -
Adaptive text field. Returns the trimmed value, or
nullif dismissed. -
showSafaehTilePicker<
T> ({required BuildContext context, required List< SafaehTileOption< options, String? title, SafaehTitleBuilder? titleBuilder, Widget? header, T? selected, SafaehTileBuilder<T> >T> ? tileBuilder, double railWidthOf(BuildContext context)?, double? tabletBreakpoint, double? maxWidth, double? maxHeight, bool barrierDismissible = true, Duration? motion, Curve? enterCurve, Curve? exitCurve, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, String? searchHint, String? searchEmptyLabel, SafaehTileSearchMatch<T> ? searchMatches, bool showTitleInBody = true, SafaehRouteOptions? route}) → Future<T?> - List-row single-select picker. Wide = dialog, phone = bottom sheet.
-
showSafaehTimedConfirm(
{required BuildContext context, required String title, required String content, required String confirmLabel, String? cancelLabel, bool isDestructive = false, int seconds = kSafaehTimedConfirmSeconds, Widget? details, String statusLabel(int remaining)?, SafaehTitleBuilder? titleBuilder, SafaehTitleBuilder? contentBuilder, double railWidthOf(BuildContext context)?, SafaehTransition? fadeScale, SafaehTransition? slideUp, SafaehPhoneSheetPlacement phonePlacement = SafaehPhoneSheetPlacement.bottom, double? tabletBreakpoint, Duration? motion, Curve? enterCurve, Curve? exitCurve, double? maxWidth, double? maxHeight, bool barrierDismissible = true, SafaehRouteOptions? route}) → Future< bool?> -
Adaptive timed confirm. Hosts pass every label — no
.tr()here. -
withSafaehAccentStyle(
ThemeData theme, {required bool subtleAccents}) → ThemeData - Applies SafaehAccentStyle without dropping other theme extensions.
Typedefs
-
SafaehActionTileBuilder<
T> = Widget Function(BuildContext context, SafaehAction< T> action) - Builds a custom action row. Tap / pop stay on the sheet.
- SafaehAuthProviderBuilder = Widget Function(BuildContext context, SafaehAuthProvider provider, String label, VoidCallback? onPressed)
- SafaehCameraSheetBuilder = Widget Function(BuildContext context, SafaehCameraSheet sheet)
- SafaehFeedbackBuilder = Widget Function(BuildContext context, VoidCallback dismiss)
- Builds custom feedback content and receives a dismissal callback owned by Safaeh. Apps can use this for richer messages while keeping placement and animation consistent with ordinary feedback.
- SafaehFeedbackInsetBuilder = double Function(BuildContext context)
- Resolves extra bottom clearance for feedback overlays.
- SafaehLabelBuilder = Widget Function(String data, TextStyle? style)
- Host bidi / i18n wrapper for a string label. Same shape on sidenav, floating nav, and page index.
- SafaehMorphingAppBarActionBuilder = Widget Function(BuildContext context, double page)
- Builds the single action slot of a SafaehMorphingAppBar.
- SafaehOnboardingBackgroundBuilder = Widget Function(BuildContext context, SafaehOnboardingDesign design)
- Optional host-supplied background builder.
-
SafaehTileBuilder<
T> = Widget Function(BuildContext context, SafaehTileOption< T> option, bool selected) -
Builds a custom row for SafaehTilePickerBody. Tap, pop, and multi-select
stay on the body (the row is visual). Use
onSelectedto intercept. -
SafaehTileSearchMatch<
T> = bool Function(SafaehTileOption< T> option, String query) -
Host-owned tile search.
queryis the raw field text (not lowercased). - SafaehTitleBuilder = Widget Function(BuildContext context, TextStyle? style)
- Optional title widget (e.g. bidi-aware Text from the host app).
-
SafaehTransition
= Widget Function({required Animation<
double> animation, required Widget child}) - Builds a wide-dialog entrance (fade + scale).