Skip to main content

duskmoon_adaptive_scaffold 2.2.5 copy "duskmoon_adaptive_scaffold: ^2.2.5" to clipboard
duskmoon_adaptive_scaffold: ^2.2.5 copied to clipboard

Adaptive scaffold widgets for DuskMoon Design System, forked from flutter_adaptive_scaffold.

duskmoon_adaptive_scaffold #

Adaptive scaffold widgets for the DuskMoon Design System, forked from flutter_adaptive_scaffold.

Features #

  • DmAdaptiveScaffold — adaptive layout that adjusts to screen size using Material 3 navigation patterns
  • AdaptiveLayout — low-level adaptive layout primitive
  • SlotLayout — slot-based layout composition

Getting started #

dependencies:
  duskmoon_adaptive_scaffold: ^1.1.0

Usage #

import 'package:duskmoon_adaptive_scaffold/duskmoon_adaptive_scaffold.dart';

DmAdaptiveScaffold(
  destinations: const [
    NavigationDestination(icon: Icon(Icons.home), label: 'Home'),
    NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),
  ],
  body: (_) => const Center(child: Text('Body')),
)

Foldable and companion displays #

DuoScreenPolicy.splitBody places the body and secondary body on opposite sides of a separating hinge or fold. Horizontal separators split top/bottom; vertical separators mirror body reading order in RTL. A zero-width flat fold does not split the layout. A non-occluding half-open fold also lets a single body span the continuous display when no secondary body is active at the current breakpoint, including DmAdaptiveScaffold.emptyBuilder overrides. Active secondary bodies still split at the fold. Physical hinges and occluding folds always keep content in separate panes. Feature selection is deterministic: physical hinges take precedence over folds, then bounds are ordered top-to-bottom and left-to-right.

DuoScreenPolicy.navigationOnSecondary moves navigation beside the secondary body. It uses the regular adaptive layout when there is no separating feature and duoScreenRole is single, so local navigation stays available.

DmAdaptiveScaffold(
  destinations: destinations,
  duoScreenPolicy: DuoScreenPolicy.navigationOnSecondary,
  // Use primary only after the companion view has connected successfully.
  duoScreenRole: companionConnected
      ? DuoScreenRole.primary
      : DuoScreenRole.single,
  body: (_) => viewer,
  secondaryBody: (_) => controller,
)

Use DuoScreenRole.secondary in the companion view. It mounts navigation and secondaryBody only; primary mounts the main body only. Top navigation belongs to the primary view. Hidden slots are not built, focusable, or exposed in semantics, and their state is disposed. Visible slots retain their identity when the role changes. A narrow companion view uses bottom navigation; on a foldable, secondary panes narrower than 600 logical pixels also use bottom navigation.

Hinge bounds are resolved in local layout coordinates, including AppBars and ancestor padding. Pane boundaries align immediately to the physical separator; size interpolation across a hinge is deliberately disabled. Slot fades and navigation width changes remain bounded by pane clipping. View offset changes are corrected after parent positioning, with physical hinge paint and hit-test clipping protecting the first frame.

Migrating displayId #

AdaptiveLayout and DmAdaptiveScaffold retain the deprecated displayId parameter until 2.0.0. Positive values still select the secondary role and take precedence over duoScreenRole; zero defaults to single. Replace it with duoScreenRole, and leave platform display identifiers in the plugin or app integration layer. Roles only affect navigationOnSecondary.

The policy remains available to existing callers importing src/adaptive_layout.dart. DmScaffold also forwards the additive duoScreenPolicy and duoScreenRole parameters.

Additional information #

Part of the DuskMoon UI design system.

Source and licenses #

Flutter-derived source retains its BSD-3-Clause license; DuskMoon modifications retain their MIT terms. See SOURCE.md, LICENSE and THIRD_PARTY_LICENSES for the retained notices, import history and known provenance limits.

0
likes
0
points
1.83k
downloads

Publisher

verified publishergsmlg.dev

Weekly Downloads

Adaptive scaffold widgets for DuskMoon Design System, forked from flutter_adaptive_scaffold.

Repository (GitHub)
View/report issues

Topics

#flutter #adaptive #scaffold #material-design

License

unknown (license)

Dependencies

flutter

More

Packages that depend on duskmoon_adaptive_scaffold