Generated from
docs/architecture/ARCHITECTURE_REVIEW.md~50 issues across components, primitives, utilities, theme, and project
Priority: P0 · Est: 4 hrs · Deps: None
Create a base interaction widget that handles hover, press, focus, and disabled states through a unified WidgetState pattern.
Requirements:
- Accept
WidgetStatePropertyfor all style properties (background, foreground, elevation, etc.) - Handle
MouseRegionfor hover effects on desktop - Handle
Focusnode withonFocusChangecallback - Handle
GestureDetectorfor press states (onTap, onLongPress, etc.) - Expose
WidgetStateset for consumers to build custom visual feedback - Accept
onHover,onPressIn,onPressOutcallbacks - Manage cursor changes via
SystemMouseCursors - Include
Semanticswrapper for accessibility - Include
debugFillPropertiesoverride
Design: Similar to Material's InkWell but generic and not tied to Material ripple. Renamed from FluxRipple concept — this is the core primitive; ripple is a visual effect layered on top.
Priority: P0 · Est: 2 hrs · Deps: None
A widget that paints a focus ring around any child when focused.
Requirements:
- Accept
FocusNodeor listen toFocus.of(context) - Use
InkWellor customDecorationfor ring painting - Support configurable:
color,width,gap,borderRadius,animationDuration - Read defaults from
FluxAnimationThemeandFluxColorTheme - Animate ring appearance/disappearance
- Support
WidgetStateto matchFluxPressabledisabled state - Use
CompositedTransformFollower/Leaderfor overlay rendering (no layout shift)
Design: Should work as a standalone wrapper or be composable inside FluxPressable.
Priority: P0 · Est: 3 hrs · Deps: FluxAnimationTheme
An AnimatedSwitcher-like widget with configurable enter/exit transitions mirroring shadcn's animate-in / animate-out CSS classes.
Requirements:
- Support animation types:
fade,scale,slide(up/down/left/right),size - Accept different
enterandexitanimation configs - Accept
FluxAnimationDurationsandFluxAnimationCurves - Accept
onEntered/onExitedcallbacks - Support
keepAliveoption to preserve child state during exit animation - Support
animateFirstflag to skip animation on first mount (default: true) - Work with
FluxPortalfor overlay animations - Use
AnimatedSwitcheror customAnimatedList/AnimatedCrossFadeinternally - Include
debugFillProperties
Priority: P0 · Est: 3 hrs · Deps: Theme extensions
Root widget that provides FluxThemeData and optional overrides to the entire widget subtree.
Requirements:
- Wraps
MaterialApporThemewith Flux theme - Accept
FluxThemeData?for overrides - Accept
brightnessoverride - Accept
localefor RTL support - Automatically configure
Directionality - Expose
MediaQueryoverrides for responsive breakpoints - Register all theme extensions in
ThemeData.extensions - Support
copyWithfor immutable updates
Priority: P0 · Est: 3 hrs · Deps: None
A portal widget for rendering children in an OverlayEntry, matching React's createPortal.
Requirements:
- Insert child into nearest
Overlay - Accept
OverlayEntryconfiguration (opaque, maintainState, etc.) - Support
onTapOutsidefor dismiss behavior - Accept
enter/exittransitions viaFluxAnimatedVisibility - Manage z-index ordering
- Support nested portals
- Remove entry from overlay when disposed
Priority: P0 · Est: 1 hr · Deps: FluxColorTheme, FluxIconTheme
A wrapper for Icon/IconData that reads color and size from theme.
Requirements:
- Accept
FluxIconData(wrapper overIconData) or standardIconData - Accept optional
coloroverride - Accept optional
sizeoverride (default from theme) - Accept
semanticLabel - Accept
applyTextScaleFactoroption - Support
WidgetStatefor dynamic sizing/coloring
Priority: P0 · Est: 2 hrs · Deps: FluxTypographyTheme
A typography widget that maps header-* / paragraph-* tokens to Flutter TextStyle.
Requirements:
- Accept
FluxTextVariantenum (headerXl...paragraphXs) - Accept optional
colorfromFluxColorTheme - Accept optional
alignment,maxLines,overflow,softWrap - Accept
semanticLabel - Map variants to
TextStylefrom theme automatically - Support
textScaleFactorfromMediaQuery - Include
localefor RTL support
Priority: P0 · Est: 8 hrs · Deps: All tokens
Break the monolithic FluxThemeData into separate ThemeExtension subclasses for lazy loading and testability.
Requirements:
- Create
FluxColorTheme— color tokens (ThemeExtension) - Create
FluxTypographyTheme— text styles - Create
FluxShapeTheme— border radii - Create
FluxSpacingTheme— spacing scale - Create
FluxShadowTheme— elevation/shadows - Create
FluxAnimationTheme— durations and curves - Create
FluxButtonTheme— button-specific tokens - Create
FluxCardTheme— card-specific tokens - Create
FluxInputTheme— input-field specific tokens - Create
FluxNavigationTheme— navigation-specific tokens - Create
FluxOverlayTheme— overlay-specific tokens - Each must implement
lerp()andhashCode/== - Each must include
copyWithandmerge - Register all in
ThemeData.extensionsviaFluxProvider - Provide context extensions on
BuildContextfor each (context.fluxColors, etc.) - Update all components to read only their specific extension (not the monolithic one)
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Create a high-contrast theme variant ensuring WCAG AAA compliance (7:1 contrast ratio for all text).
Requirements:
- Generate
FluxHighContrastThemewith contrast-optimized colors - Override all
FluxColorThemetokens to meet 7:1 ratio - Increase border widths for visual clarity
- Increase focus ring size
- Add
isHighContrastflag toBuildContextextension - Support
MediaQuery.highContrastfor automatic activation - Test with accessibility checker
Priority: P0 · Est: 4 hrs · Deps: Issue #8
Add smooth theme animation support by implementing lerp across all theme extensions.
Requirements:
- Add
lerptoFluxColorTheme(lerp each color independently) - Add
lerptoFluxTypographyTheme(lerp eachTextStyle) - Add
lerptoFluxShapeTheme(lerp each radius) - Add
lerptoFluxSpacingTheme(lerp each spacing) - Add
lerptoFluxShadowTheme(lerp each shadow offset/blur) - Add
lerptoFluxAnimationTheme(lerp each duration/curve) - Write unit tests for all lerp methods
- Ensure
tparameter is in range0.0..1.0
Priority: P0 · Est: 2 hrs · Deps: Issue #8
Map every Flux color token to a ColorScheme property for seamless Material 3 integration.
Requirements:
- Map
primary↔ColorScheme.primary - Map
primaryForeground↔ColorScheme.onPrimary - Map
secondary↔ColorScheme.secondary - Map
secondaryForeground↔ColorScheme.onSecondary - Map
background↔ColorScheme.surface - Map
foreground↔ColorScheme.onSurface - Map
destructive↔ColorScheme.error - Map
destructiveForeground↔ColorScheme.onError - Map
surface↔ColorScheme.surfaceContainerLow - Map
muted↔ColorScheme.surfaceContainerHigh - Map
border↔ColorScheme.outlineVariant - Map
ring↔ColorScheme.outline - Map
chart-1..5↔ColorScheme.tertiaryetc. - Document mapping in THEMES.md
Priority: P0 · Est: 1 hr · Deps: Issue #8
Map every header/paragraph token to a TextTheme style.
Requirements:
-
header-xl→displayLarge -
header-lg→displayMedium -
header-md→displaySmall -
header-sm→headlineLarge -
header-xs→headlineMedium -
paragraph-xl→titleLarge -
paragraph-lg→titleMedium -
paragraph-md→bodyLarge -
paragraph-sm→bodyMedium -
paragraph-xs→bodySmall - Add optional
monospacefont family token - Document mapping in THEMES.md
Priority: P1 · Est: 4 hrs · Deps: Issue #8, #11
When useMaterial3: true, disable brand themes and derive tokens from ColorScheme.fromSeed().
Requirements:
- Detect
useMaterial3flag - When
dynamicColor: true, callColorScheme.fromSeed(seedColor: ...) - Map M3
ColorSchemeback to Flux color tokens - Disable brand theme overrides when dynamic color is active
- Support
tonalSurfaceoption (M3 surface tint) - Add
FluxDynamicColorConfigwithseedColor,contrastLevel,isDarkoptions
Priority: P0 · Est: 6 hrs · Deps: Issue #1, #2, #8
Refactor FluxButton to use Flutter-native patterns.
Requirements:
- Replace
leading/trailing→icon/trailingconsistent with Material naming - Change
loading: bool→loading: Widget?for custom loader - Change
destructive: bool→ addFluxButtonVariant.destructive - Make
childoptional wheniconis used as icon-only - Integrate
FluxPressablefor interaction states - Integrate
FluxFocusRingfor keyboard navigation - Accept
WidgetStatePropertyfor style overrides - Accept
FocusNodeandonFocusChange - Add
styleFrom()static factory matching Material pattern - Add
FluxButtonThemeextension for button-specific tokens - Add
debugFillPropertiesfor DevTools - Remove
copyWithfrom widget (non-idiomatic in Flutter) - Support
Herotag for shared element transitions - Write widget tests for all variants and states
- Write golden tests for visual regression
Priority: P0 · Est: 4 hrs · Deps: Issue #1, #2, #8
Requirements:
- Replace
FluxSize.mdwithFluxCheckboxSizeenum - Change
text/supportTextto acceptWidget?for label - Add controlled + uncontrolled pattern
- Add
tristatesupport with visual dash for indeterminate - Integrate
FluxPressable - Integrate
FluxFocusRing - Accept
FocusNode/onFocusChange - Add
FluxCheckboxThemeextension - Add proper
Semantics(checked/unchecked/mixed role) - Use
EdgeInsetsDirectionalfor RTL support - Add
debugFillProperties - Add widget tests + golden tests
Priority: P0 · Est: 4 hrs · Deps: Issue #8
Requirements:
- Add
FluxInputOtpThemeextension - Support
onCompletedcallback when all slots filled - Support paste from clipboard
- Add
keyboardTypeoption (number, text, etc.) - Add proper
Semanticsfor each slot - Support RTL layout
- Add
restorationIdfor state preservation - Add
debugFillProperties - Write widget tests + golden tests
Priority: P0 · Est: 8 hrs · Deps: Issue #5, #8
Rewrite using Flutter's OverlayEntry / showMenu instead of React's portal pattern.
Requirements:
- Use
FluxPortal+OverlayEntryfor dropdown positioning - Create sub-widgets:
FluxDropdownMenu.item,.separator,.group,.checkboxItem,.radioItem - Support submenu nesting with proper positioning
- Accept
FluxDropdownMenuThemeextension - Support keyboard navigation (arrow keys, Enter, Escape)
- Support
onOpenChangecallback - Use
FocusScopefor menu traversal - Add proper
Semantics(menu, menuitem roles) - Add
FluxPopoverfor hover-triggered submenus - Add
debugFillProperties - Write widget tests
Priority: P1 · Est: 6 hrs · Deps: Issue #1, #2, #8
Requirements:
- Support single thumb and range (dual thumb) modes
- Support discrete (snap to values) and continuous modes
- Accept
min,max,step,divisions - Accept
value/valuesfor single/range - Accept
onChanged,onChangeStart,onChangeEnd - Integrate
FluxPressablefor thumb interaction - Integrate
FluxFocusRingfor keyboard adjustment - Add
FluxSliderThemeextension - Add
SemanticswithSliderrole - Support RTL (reverse direction)
- Add tooltip on thumb for current value
- Add
debugFillProperties
Priority: P1 · Est: 4 hrs · Deps: Issue #1, #2, #8
Requirements:
- Change
FluxSize.md→FluxSwitchSizeenum - Accept
Widget?for label - Integrate
FluxPressable - Integrate
FluxFocusRing - Add
FluxSwitchThemeextension - Add
SemanticswithSwitchrole - Animate thumb position and track color
- Use
WidgetStatePropertyfor track/thumb colors - Add
debugFillProperties
Priority: P1 · Est: 4 hrs · Deps: Issue #1, #2, #8
Requirements:
- Create
FluxRadioGroupfor managing radio state - Change
FluxSize.md→FluxRadioSizeenum - Accept
Widget?for label - Integrate
FluxPressable - Add
FluxRadioThemeextension - Add
SemanticswithRadiorole - Support controlled + uncontrolled
- Animate selected indicator
- Add
debugFillProperties
Priority: P0 · Est: 6 hrs · Deps: Issue #8
Requirements:
- Add
FluxTextFieldThemeextension - Support outlined and filled variants
- Support textarea (multiline)
- Support validation states:
none,error,success,warning - Accept
prefixandsuffixwidgets - Accept
counterfor character counting - Support
passwordtoggle visibility - Add proper
Semantics - Add
FocusNode/onFocusChange - Add
restorationId - Support keyboard type, action, and
onSubmitted - Add
debugFillProperties
Priority: P2 · Est: 3 hrs · Deps: Issue #21
Requirements:
- Build on top of
FluxTextField - Add automatic search icon
- Add clear button when text is non-empty
- Add
onSearchcallback (debounced) - Add
debounceDurationparameter - Support
onClearcallback
Priority: P2 · Est: 5 hrs · Deps: Issue #17, #21
Requirements:
- Build on top of
FluxTextField+FluxDropdownMenu - Support single and multiple selection
- Show selected value(s) in the input area
- Support search/filter within dropdown
- Support
onCreatecustom option - Support clearable selection
- Add
FluxSelectThemeextension
Priority: P0 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support variants:
elevated,outlined,tonal,ghost - Add
FluxCardThemeextension - Accept
onTapfor clickable cards - Integrate
FluxPressablewhenonTapis provided - Accept
Herotag for shared element transitions - Accept
paddingoverride - Add proper
Semantics - Add
debugFillProperties
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support image, initials (from name), and fallback icon
- Support sizes:
sm,md,lg,xl - Support badge overlay via
FluxBadge - Accept
onTapfor clickable - Add
FluxAvatarThemeextension - Accept
Herotag - Add proper
Semantics
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Support variants:
dot,count,icon - Support positions:
topRight,topLeft,bottomRight,bottomLeft - Support
maxCountfor overflow display (e.g., "99+") - Support
colorvariants:primary,secondary,success,error,warning - Add
FluxBadgeThemeextension - Animate count changes
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support variants:
label,dismissible,selected,input - Accept
avatarwidget for leading avatar - Accept
onDeletedfor dismissible chips - Accept
onSelectedfor selected chips - Add
FluxChipThemeextension - Integrate
FluxPressablefor interactive chips - Animate selection state
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Support color variants:
primary,secondary,success,warning,error,info - Accept custom
coloroverride - Small, compact design
- Add
FluxTagThemeextension
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support variants:
success,warning,error,info - Include icon, title, description, optional action
- Support dismissible variant
- Add
FluxAlertThemeextension - Add proper
Semantics(alert role, live region)
Priority: P0 · Est: 4 hrs · Deps: Issue #3, #5, #8
Requirements:
- Manage queue of toasts via
FluxToastService(singleton/InheritedWidget) - Support variants:
success,error,info,warning - Support action button
- Support auto-dismiss with configurable duration
- Support stackable toasts
- Use
FluxPortalfor overlay rendering - Use
FluxAnimatedVisibilityfor enter/exit animations - Support swipe-to-dismiss
- Add
FluxToastThemeextension
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Themed wrapper around Flutter's
SnackBar - Override
SnackBarThemefrom Flux tokens - Support action button
- Support
duration,behavior,shape,elevation
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support
linearandcircularvariants - Support
determinate(with value) andindeterminatemodes - Add
FluxProgressThemeextension - Animate value changes
- Add proper
Semantics(progressbar role) - Support size variants
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support shapes:
text(line),circle,rectangle - Accept
widthandheightoverrides - Use shimmer animation from
FluxShimmer - Add
FluxSkeletonThemeextension - Animate pulse/shimmer effect
- Accept
borderRadiusoverride
Priority: P1 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Reusable shimmer/gradient animation widget
- Accept custom gradient colors
- Accept animation
durationandcurve - Accept
direction(left-to-right, top-to-bottom, etc.) - Support
FluxShimmerThemeextension - Use
AnimatedBuilderwithAnimationController
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Support sizes:
sm,md,lg,xl - Accept
coloroverride - Add
FluxSpinnerThemeextension - Use
AnimationControllerfor rotation
Priority: P0 · Est: 6 hrs · Deps: Issue #3, #5, #8
Requirements:
- Support variants:
alert,confirmation,custom,fullscreen - Use
FluxPortalfor overlay - Use
FluxAnimatedVisibilityfor enter/exit - Support barrier dismissible option
- Accept
title,content,actions,icon - Support
onOpen,onClosecallbacks - Add
FluxDialogThemeextension - Add proper
Semantics(dialog role, modal) - Manage focus trapping within dialog
- Handle Escape key to dismiss
Priority: P1 · Est: 4 hrs · Deps: Issue #3, #5, #8
Requirements:
- Support
standardandexpandedvariants - Support drag handle for grab gesture
- Support snap points (e.g., collapsed, half, expanded)
- Use
DraggableScrollableSheetinternally - Use
FluxPortalfor overlay - Use
FluxAnimatedVisibilityfor animation - Add
FluxBottomSheetThemeextension - Support
onOpen,onClosecallbacks
Priority: P1 · Est: 6 hrs · Deps: Issue #3, #5, #8
Requirements:
- Support anchor positioning (top, bottom, left, right, center)
- Support alignment variants (start, center, end)
- Accept
FluxAnimatedVisibilityfor transitions - Use
FluxPortalfor overlay - Support
onOpenChangecallback - Support dismiss on click outside
- Use
CompositedTransformFollower/Leaderfor positioning - Add
FluxPopoverThemeextension - Support keyboard dismiss (Escape)
Priority: P1 · Est: 4 hrs · Deps: Issue #3, #5, #8
Requirements:
- Support rich content (not just text)
- Support all positions (top, bottom, left, right)
- Use
FluxPortalfor overlay - Use
FluxAnimatedVisibilityfor animation - Support
showDelayandhideDelay - Support
onShow,onHidecallbacks - Use
MouseRegionfor hover trigger - Add
FluxTooltipThemeextension
Priority: P0 · Est: 5 hrs · Deps: Issue #8
Requirements:
- Support
horizontalandverticalorientations - Support scrollable tabs
- Accept list of
FluxTabitems (title, icon, badge) - Support
FluxTabscontent with automatic tab panel switching - Animate indicator position
- Add
FluxTabsThemeextension - Add proper
Semantics(tablist, tab, tabpanel roles) - Keyboard navigation (arrow keys, Home, End)
Priority: P1 · Est: 4 hrs · Deps: Issue #3, #8
Requirements:
- Support
singleandmultipleexpand modes - Accept list of
FluxAccordionItemwith title + content - Use
FluxAnimatedVisibilityfor expand/collapse - Animate chevron rotation
- Add
FluxAccordionThemeextension - Support
onExpandedChangecallback
Priority: P2 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Accept list of
FluxBreadcrumbItemwith label + optional link - Support separator customization (default:
/) - Support icon separators
- Collapse on overflow (show ellipsis)
- Add proper
Semantics(nav, breadcrumb roles)
Priority: P2 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Support page number buttons with prev/next
- Support ellipsis for large page ranges
- Support sibling count (pages around current)
- Support boundary count (pages at start/end)
- Accept
total,current,onChanged - Add
FluxPaginationThemeextension - Add proper
Semantics
Priority: P2 · Est: 4 hrs · Deps: Issue #8
Requirements:
- Vertical navigation rail for desktop
- Support icons, labels, badges
- Support collapsed/expanded states
- Add
FluxNavigationRailThemeextension - Use
FluxButtonfor each nav item - Support
selectedIndexandonChanged
Priority: P1 · Est: 5 hrs · Deps: Issue #3, #5, #8
Requirements:
- Support left and right positioning
- Support persistent (always visible) and temporary (overlay) modes
- Use
FluxAnimatedVisibilityfor slide animation - Support swipe-to-open gesture
- Add
FluxDrawerThemeextension
Priority: P1 · Est: 8 hrs · Deps: Issue #8
Requirements:
- Generic typing:
FluxTable<T> - Sortable columns with
onSortcallback - Selectable rows with checkbox column
- Support horizontal scroll for many columns
- Support sticky header
- Support empty state
- Support loading state (show skeleton rows)
- Add
FluxTableThemeextension - Add proper
Semantics(table, grid roles)
Priority: P2 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Vertical timeline with alternating left/right items
- Customizable dot/icon for each item
- Connector line between items
- Add
FluxTimelineThemeextension - Support
FluxSliverTimelineforCustomScrollView
Priority: P2 · Est: 4 hrs · Deps: Issue #8
Requirements:
- Image carousel with dot indicators
- Support
PageViewor custom sliding animation - Auto-play with configurable interval
- Support infinite loop
- Support
onPageChangedcallback - Add
FluxCarouselThemeextension
Priority: P2 · Est: 3 hrs · Deps: Issue #8
Requirements:
- Optimized image with placeholder
- Support
Herotag - Support loading, error, and empty states
- Support
fit,alignment,filterQuality - Use
FadeInImageorcached_network_image
Priority: P2 · Est: 4 hrs · Deps: None
Requirements:
- Masonry grid layout with variable-height items
- Accept item count or list of widgets
- Support custom cross-axis count
- Support
SliverMasonryGridforCustomScrollView - Animate item insertion/removal
Priority: P1 · Est: 4 hrs · Deps: None
Requirements:
- Responsive grid similar to CSS Grid
- Support
columns,gap,paddingproperties - Auto-wrap children at breakpoints
- Support
SliverGriddelegate - Accept
FluxBreakpointfor responsive column count
Priority: P1 · Est: 1 hr · Deps: None
Requirements:
- Stack overlapping items with alignment
- Wrapper around Flutter
Stackwith Flux defaults - Accept
alignmentandfitfrom theme
Priority: P1 · Est: 3 hrs · Deps: Issue #3, #5, #8
Requirements:
- Modal overlay with dimming background
- Use
FluxPortalfor overlay layer - Use
FluxAnimatedVisibilityfor animation - Support dismiss on backdrop tap
- Support
onDismisscallback - Manage focus trapping
Priority: P1 · Est: 1 hr · Deps: Issue #8
Requirements:
- Support horizontal and vertical orientations
- Support label in horizontal mode (similar to
<hr>with text) - Add
FluxDividerThemeextension
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Icon, message, and optional action button
- Support custom illustration widget
- Add
FluxEmptyStateThemeextension
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Error message with optional retry button
- Accept
errorobject for detailed message - Add
FluxErrorStateThemeextension
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Large hero section for page headers
- Support background image with overlay
- Support title, subtitle, action buttons
Priority: P2 · Est: 2 hrs · Deps: Issue #3, #8
Requirements:
- Top banner, dismissible
- Support variants:
info,success,warning,error - Use
FluxAnimatedVisibilityfor slide-down animation
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
- Full-page loading overlay
- Use
FluxSpinneror custom loader - Support optional message below spinner
- Support
FluxLoadingThemeextension
Priority: P1 · Est: 4 hrs · Deps: FluxBreakpoint system
Requirements:
- Breakpoint-aware layout switching
- Support breakpoints:
xs(0),sm(640),md(768),lg(1024),xl(1280),xxl(1536) - Accept builders per breakpoint
- Use
LayoutBuilder+MediaQueryfor responsive detection - Provide
FluxBreakpointenum andBuildContextextension
Priority: P2 · Est: 2 hrs · Deps: None
Requirements:
- Platform-adaptive layout (material vs. cupertino)
- Detect
Theme.platformordefaultTargetPlatform - Switch between
FluxResponsiveLayoutand platform-specific widgets
Priority: P2 · Est: 4 hrs each · Deps: Issue #8
Requirements:
FluxStepper: Step indicator with completed/active/pending states, optional labels, horizontal and vertical layoutFluxSidebar: Responsive sidebar navigation, collapsible, withFluxNavigationRailintegration
Priority: P1 · Est: 3 hrs · Deps: Issue #4, #8
Requirements:
- InheritedWidget/ChangeNotifier for theme state
- Support
FluxThemeModeenum:light,dark,system,highContrast - Support brand switching
- Provide
FluxThemeNotifierfor consumers - Persist theme preference (optional)
Priority: P2 · Est: 4 hrs · Deps: Issue #4
Requirements:
- InheritedWidget for locale state
- Map Flux string catalog to translated strings
- Support
FluxLocalizationDelegatefor custom loaders - Provide context extension:
context.fluxLocale.tr('key')
Priority: P1 · Est: 1 hr · Deps: None
Requirements:
- Fixed-size spacing widget (width/height from
FluxSpacingTheme) - Accept
FluxSpacingTokenor raw double - Support
horizontalandverticalvariants - Swifty SwiftUI
Spacer(frame:)pattern
Priority: P1 · Est: 1 hr · Deps: None
Requirements:
- Wrapper around
SafeAreawith Flux padding defaults - Accept
FluxSpacingTokenfor minimum padding
Priority: P1 · Est: 1 hr · Deps: FluxBreakpoint
Requirements:
- Constrain content to max-width (optimizing for readability)
- Support breakpoint-aware max widths
- Center content horizontally
Priority: P0 · Est: 3 hrs · Deps: Issue #8
Requirements:
-
context.fluxColors,context.fluxTypography, etc. for all theme extensions -
context.isDark,context.isRTL -
context.mediaQuery,context.screenWidth,context.screenHeight -
context.breakpoint→FluxBreakpoint -
context.isMobile,context.isTablet,context.isDesktop -
context.theme→ThemeDatashortcut
Priority: P1 · Est: 2 hrs · Deps: None
Requirements:
-
.paddingAll(value) -
.paddingSymmetric({h, v}) -
.paddingOnly({l, t, r, b}) -
.marginAll(value)(via Container) -
.sliver()→ wrap inSliverToBoxAdapter -
.center()→ wrap inCenter -
.expanded()→ wrap inExpanded -
.flexible()→ wrap inFlexible -
.tooltip(message)→ wrap inTooltip -
.onTap(callback)→ wrap inGestureDetector
Priority: P1 · Est: 2 hrs · Deps: None
Requirements:
-
Color.darken(amount)— darken by 0..1 -
Color.lighten(amount)— lighten by 0..1 -
Color.isLight→ bool -
Color.isDark→ bool -
Color.withOpacity(opacity)— typed convenience -
Color.hex(String)— parse from hex string -
Color.lerp(Color a, Color b, double t)— static -
Color.hsl(H, S, L)— create from HSL -
List<Color>gradient creation helpers
Priority: P1 · Est: 1 hr · Deps: Issue #8
Requirements:
-
FluxShadowSizeenum (xs through 3xl) -
BoxDecoration.withShadow(FluxShadowTheme, FluxShadowSize) -
Material.withFluxShadow(FluxShadowTheme, FluxShadowSize)
Priority: P1 · Est: 2 hrs · Deps: Issue #8
Requirements:
-
FluxAnimationDurations— fastest (100ms), fast (150ms), normal (200ms), slow (300ms), slower (500ms) -
FluxAnimationCurves— default, spring, emphasis -
FluxTweenBuilder— generic tween builder -
FluxDelayedAnimation— delay + animate -
FluxStaggeredAnimation— multi-step animation
Priority: P1 · Est: 1 hr · Deps: Issue #8
Requirements:
-
TextStyle.applyFluxStyle(FluxTypographyTheme) -
TextStyle.withFontFamily(String) -
TextStyle.withColor(Color)
Priority: P1 · Est: 1 hr · Deps: Issue #8
Requirements:
-
FluxBorderRadius— all radii fromFluxShapeTheme -
BorderRadiusGeometry.flux(FluxShapeTheme, 'md')builder -
RoundedRectangleBorder.flux(FluxShapeTheme, 'md')builder
Priority: P0 · Est: 8 hrs · Deps: None
Requirements:
- Set up
flutter_testgolden test infrastructure - Create
test/goldens/directory - Add
flutter test --update-goldensworkflow - Golden test for every component (all variants)
- Golden test for light and dark themes
- Golden test for RTL layout
- Golden test for high contrast
- GitHub Action to verify goldens on PR
Priority: P0 · Est: 8 hrs · Deps: None
Requirements:
- Widget tests for every component
- Test all variants, states, sizes
- Test interactive behaviors (tap, hover, focus, keyboard)
- Test edge cases (null values, empty lists, overflow)
- Test RTL behavior
- Test accessibility (semantics)
- Test with and without
FluxProvider
Priority: P0 · Est: 6 hrs · Deps: None
Requirements:
- GitHub Actions:
ci.ymlfor PR validation - Jobs:
format→analyze→test→test:goldens→build -
publish-dry-run.ymlfor manual publishing check - Melos workflow integration
- Code coverage reporting (Codecov or Coveralls)
- Status badges in README
Priority: P0 · Est: 2 hrs · Deps: None
Requirements:
- Add
package:flutter_lints/flutter.yamlas base - Custom rules:
prefer_const_constructors,avoid_redundant_argument_values,use_super_parameters,require_trailing_commas - Add
always_use_package_importsfor clean imports - Add
prefer_final_parametersfor constructor params - Add
diagnostic_describe_all_propertiesto ensuredebugFillPropertieson all widgets
Priority: P1 · Est: 4 hrs · Deps: All components
Requirements:
- Migration guide from Material Design to Flux UI
- Migration guide from Cupertino to Flux UI
- Migration guide from shadcn/ui / React to Flux UI
- Per-component migration notes in each component doc
Priority: P1 · Est: 8 hrs · Deps: All components
Requirements:
- Working Flutter app in
apps/example/ - Exercise every public widget
- Show all variants, states, and sizes
- Support light/dark/high-contrast toggle
- Support brand theme picker
- Support RTL toggle
- Include code snippets for each component
- Include interactive controls to change properties
Priority: P1 · Est: 8 hrs · Deps: All components
Requirements:
- Every
docs/components/*.mdmust include:- Description
- API reference with all parameters
- Usage examples (basic, all variants, custom theme)
- Code snippets with Dart/Flutter
- Accessibility notes
- Testing notes
- Migration notes (from Material/Cupertino)
- Composition notes (with other Flux widgets)
- "All Properties" example for every component
- "Custom Theme" example for every component
Priority: P2 · Est: 6 hrs · Deps: All components
Requirements:
-
FlutterPerformancebenchmarks for each component - Build time benchmarks
- Layout time benchmarks
- Paint time benchmarks
- Memory usage benchmarks
- Compare against Material widgets
- Add to CI as performance regression detection
Priority: P1 · Est: 4 hrs · Deps: All widgets
Requirements:
- Every widget has
debugFillPropertiesoverride with all key properties - Theme extensions are inspectable in DevTools
- Add
DiagnosticsNodefor complex states - Add
DiagnosticsPropertyfor all enums and flags - Ensure
toStringShortandtoStringDeepare useful
Priority: P0 · Est: 2 hrs · Deps: None
Requirements:
- Create multi-level barrel exports:
lib/flux_ui.dart— everything (convenience)lib/flux_theme.dart— theme onlylib/flux_components.dart— components onlylib/flux_tokens.dart— design tokens only
- Each barrel re-exports from
src/subdirectories - Document import paths in ARCHITECTURE.md
Priority: P2 · Est: 4 hrs · Deps: All scrollable components
Requirements:
- Add
SliverFluxTablefor use inCustomScrollView - Add
SliverFluxTimelinefor use inCustomScrollView - Add
SliverFluxCarouselfor use inCustomScrollView - Add
SliverFluxGriddelegate forCustomScrollView - Add
SliverFluxMasonrydelegate forCustomScrollView - Add
SliverFluxEmptyState/SliverFluxErrorState
Priority: P1 · Est: 3 hrs · Deps: All stateful components
Requirements:
- Add
RestorationMixinto all stateful widgets - Add
restorationIdproperty to every stateful component - Preserve scroll position, selection, input values, open/close states
- Widget tests verifying restoration behavior
Priority: P1 · Est: 2 hrs · Deps: Card, Image, Avatar, Dialog
Requirements:
- Add
heroTagproperty toFluxCard,FluxImage,FluxAvatar,FluxDialog - Create
FluxHerowrapper widget - Document shared element transition patterns
- Example in the example app
Priority: P1 · Est: 6 hrs · Deps: All components
Requirements:
- Audit every component for
Semanticscompliance - Ensure all interactive elements have proper roles (button, checkbox, slider, tab, etc.)
- Ensure all labels are localized
- Ensure keyboard navigation works for all widgets
- Ensure focus order is logical
- Test with screen readers (TalkBack, VoiceOver)
- Test with high contrast mode
- Test with large font sizes
- Add
flutter test --integrationaccessibility tests - Document accessibility in each component doc
| Batch | Issues | Focus |
|---|---|---|
| 1 | #1–#7 | Primitives & Foundation |
| 2 | #8–#13 | Theme System |
| 3 | #14–#59 | All Component Refactors |
| 4 | #60–#62 | Navigation & Layout |
| 5 | #63–#67 | Missing Providers & Layout |
| 6 | #68–#74 | Missing Utilities |
| 7 | #75–#88 | Project-Level Infrastructure |
Total: 88 issues