NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1993 most downloaded on pub.dev
Beautifully designed, minimalistic Flutter widgets for desktop & touch devices. Designs are heavily inspired by shadcn/ui and are fully customizable.
Last release 3 days ago
04 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 58 of 58 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
58 releases · first in 2024
Fix FTooltip consuming the escape key when the tooltip is hidden.
FTooltipFTooltip consuming the escape key when the tooltip is hidden.FTooltip not being dismissed by the escape key when shown via focus.Change toasts to auto-dismiss when FAccessibility.accessibleNavigation is true.
FToastChange toasts to auto-dismiss when FAccessibility.accessibleNavigation is true.
Fix toasts not being dismissible in both directions of an axis when swipeToDismiss contains both.
One column per month.
Fix FBottomNavigationBar double-padding inner content when safeAreaBottom is true.
FBottomNavigationBarFBottomNavigationBar double-padding inner content when safeAreaBottom is true.Fix the menu arrow's base being crossed by a border.
FSelectMenuTileBreaking Change portalBuilder to receive the portal's resolved geometry as a third parameter.
This update ships a refreshed tooltip & support for adding arrows to context menus and popovers. In addition, substantial
accessibility improvements and bug fixes have been made.
FAvatarsemanticsLabel not being announced while the image is loading or has failed to load.FBreadcrumbFBreadcrumbItem.collapsed(arrow: ...)FBreadcrumbItem.collapsedTiles(arrow: ...).FCalendarFContextMenuAdd arrow & Home/End keyboard navigation to FContextMenu.
Add menu & menu item semantics roles to FContextMenu.
Add Shift+F10 (Control+Return on macOS) & menu key shortcuts to open FContextMenu.
Change FContextMenu.autofocus to default to true.
Change FContextMenu items to request focus when hovered.
FFocusedOutlineFItem & FItemGroupAdd FItem.semanticsButton.
Add FItem.semanticsChecked.
Add FItem.semanticsInMutuallyExclusiveGroup.
Add FInheritedItemCallbacks.hoverFocus.
Add FInheritedItemCallbacks.semanticsRole.
Fix FItem advertising a no-op tap action to screen readers.
Fix FItem long-press action not exposed to screen readers when inside a group.
FLabelChange error to be a live region on platforms without accessibility announcement support.
Fix label, description and error not being announced with the form field by screen readers.
FPortalAdd FPortalArrowDecoration.
Add FPortalArrowStyle.
Add FPortalArrowAlignment.
Add FPortalGeometry.
Breaking Change portalBuilder to receive the portal's resolved geometry as a third parameter.
FPopoverFPopover.arrow.FPopover.childFocusNode.FPopoverStyle.arrowStyle.FPopoverMenuAdd FPopoverMenu.arrow.
Add FPopoverMenu.childFocusNode.
Add FSubmenuItem.submenuArrow
Add FSubmenuTile.submenuArrow.
Add arrow & Home/End keyboard navigation to FPopoverMenu.
Add menu & menu item semantics roles to FPopoverMenu.
Change FPopoverMenu items to request focus when hovered.
Change focused items and tiles to use the hovered appearance.
FResizableonResizeEnd.FSelect & FMultiSelectAdd Backspace to clear a clearable FSelect while its field is focused.
Add Backspace to remove the last tag while a FMultiSelect field is focused.
Fix FMultiSelect label and description not being announced with the field by screen readers.
Fix FMultiSelect tags not announcing that activating them removes the item.
Fix items being announced as buttons instead of radio buttons in FSelect and checkboxes in FMultiSelect.
Fix FMultiSelect hint being merged into the field's semantic label instead of its hint.
Fix search result count changes not being announced to screen readers.
FSelectMenuTileAdd FSelectMenuTile.menuArrow.
Fix validation state not being exposed to screen readers when validation passes.
FSliderAdd Home/End to jump a thumb to the track's minimum/maximum.
Fix value tooltip not shown on keyboard focus.
Fix label and description not being announced with the slider by screen readers.
Fix thumbs not being adjustable by screen readers.
Fix announced increased/decreased values equaling the current value.
Fix disabled slider still being announced as enabled by screen readers.
Fix disabled slider's thumb still being focusable by screen readers.
FTile & FTileGroupFTileGroup label and description not naming the group for screen readers.FTappableAdd FTappable.hoverFocus.
Add FTappable.semanticsContainer.
Add FTappable.semanticsRole.
Fix screen reader focus ring staying at the old position after scrolling when used as a text field affix.
FTextFieldFTooltipAdd FTooltip.arrow.
Add FTooltipStyle.arrowStyle.
Breaking Change FTooltip.spacing default from 4 to 7.
Breaking Change FTooltipStyle.inherit to use a foreground background, and no border or shadow.
Breaking Change FTooltipStyle.padding default from (14, 10) to (12, 6).
Breaking Remove FTooltipStyle.shadow.
FToasterFToasterEntry.dismiss() crashing when called before the toast's entrance animation starts.onDismiss being called twice when swiping a toast away while accessible navigation is enabled.Update icons to Lucide 1.47.0.
Fix icons not being tree-shaken when unused on wasm.
Breaking Change FFieldClearIconBuilder to be generic. Use FFieldClearIconBuilder<FTextFieldStyle> instead.
This update replaces the deprecated flutter/cupertino.dart & flutter/material.dart libraries with the cupertino_ui
& material_ui packages introduced in Flutter 3.47.
It also includes several QoL improvements, such as a new open range selection controller for FCalendar.
Lastly, we have renamed the forui_assets package to forui_lucide to better reflect its contents, and introduced a
new forui_phosphor package that contains the Phosphor Icons set.
FAutocompleteFAutocomplete.clearIconBuilder.FAutocomplete.enableAutocompletion.FCalendarAdd FDateSelectionController.openRange(...).
Add FDateSelectionControl.managedOpenRange(...) and FDateSelectionControl.liftedOpenRange(...).
Fix day, month and year labels being clipped before reaching the calendar edge while paging.
FDateFieldAdd FDateField.clearIconBuilder.
Fix Tamil (ta) defaulting to English.
FDateTimePicker & FTimePicker00 in 24-hour mode in locales that use non-western numerals.FLabelChange FLabel's horizontal layouts to place the gap between the label and child in labelPadding,
descriptionPadding and errorPadding instead of childPadding.
Fix dead space around the control even when no label, description, and error are provided.
Fix controls not being flush with the layout edges, misaligning them with sibling form fields.
FSelect & FMultiSelectFSelect.clearIconBuilder.FMultiSelect.clearIconBuilder and FMultiSelect.defaultClearIconBuilder.FSelectSearchFieldProperties.clearIconBuilder.FSliderFSliderStyle.labelPadding's default from EdgeInsets.only(bottom: 5) to EdgeInsets.only(bottom: 15).FTappableAdd FTappable(selectable: ...) to control whether descendant text participates in an enclosing SelectionArea.
Defaults to false.
Fix labeled (excludeSemantics) and grouped (FTappableGroup) tappables dropping SemanticsAction.tap.
FTextFieldFFieldClearIconBuilder to be generic. Use FFieldClearIconBuilder<FTextFieldStyle> instead.FTimeFieldAdd FTimeField.clearIconBuilder.
Fix Tamil (ta) defaulting to English.
Fix Assamese (as) and Tamil (ta) merging the minute and period into a single segment.
flutter/cupertino.dart to cupertino_ui package.flutter/material.dart to material_ui package.forui_assets package to forui_lucide. Update direct imports to package:forui_lucide/forui_lucide.dart.Breaking Rename package from forui_assets to forui_lucide.
Update icons to Lucide 1.33.0.
Fix matchTextDirection not being applied to several directional icons.
Add Phosphor icon library option.
Fix forui init --force writing files to the overwritten forui.yaml's output paths.
Breaking Change FBreadcrumbItem.collapsed(semanticsLabel: ...) and FBreadcrumbItem.collapsedTiles(semanticsLabel: ...) to label the trigger. Use menuS…
This update continues with our ongoing effort to improve Forui's accessibility. It also includes several QoL improvements
and bugfixes.
FAutocompleteFAutocomplete.contentOverlayLocation.FBreadcrumbAdd FBreadcrumbItem.collapsed(menuSemanticsLabel: ...) and FBreadcrumbItem.collapsedTiles(menuSemanticsLabel: ...).
Breaking Change FBreadcrumbItem.collapsed(semanticsLabel: ...) and
FBreadcrumbItem.collapsedTiles(semanticsLabel: ...) to label the trigger. Use menuSemanticsLabel to label the menu.
Fix FBreadcrumbItem ignoring autofocus, focusNode, onFocusChange, onHoverChange, onVariantChange and
FBreadcrumbStyle.focusedOutlineStyle.
Fix FBreadcrumbItem without an onPress being announced as a disabled button and changing color on hover.
FButtonFButton.onDisabledPress.FButton.semanticsTooltip.FContextMenuFContextMenu.overlayLocation.FDateFieldFDateFieldCalendarProperties.overlayLocation.FDialogAdd FDialogRouteStyle.defaultBarrierFilter.
Add FDialogRoute.capturedScopes.
Breaking Change FDialogRouteStyle.barrierFilter and FDialogStyle.backgroundFilter to accept a BuildContext.
Breaking Remove FDialogRouteStyle.inherit(colors: ...). Use FDialogRouteStyle.inherit() instead.
Fix showFDialog not restyling the dialog and barrier when the theme changes while open.
FHeaderActionFHeaderAction.semanticsTooltip.FIconsWe have replaced the FIconBuilder function with FIcon to fix widgets flickering whenever the same FThemeData is
rebuilt.
Add FIcon.
Breaking Remove FIconBuilder. Use FIcon instead.
Breaking Remove FIcons.iconData(...). Use FIcon(...) instead.
Fix widgets flickering when an equal FThemeData is recreated.
FItem & FTileFItem.semanticsTooltip and FTile.semanticsTooltip.FModalBarrier & FAnimatedModalBarrierFAnimatedModalBarrier.filter to accept a BuildContext.FOverlayFOverlay.overlayLocation.FPaginationFPagination's previous and next buttons being enabled on the first and last pages.FPagination's ellipsis being announced by screen readers.FPagination's page buttons being announced without their page number.FPointPortalFPointPortal.overlayLocation.FPopoverAdd FPopover.overlayLocation.
Add FPopover.traversalGrouped.
Breaking Change FPopoverStyle.barrierFilter and FPopoverStyle.backgroundFilter to accept a BuildContext.
Fix FPopover content not being traversed immediately after its child.
FPopoverMenuFPopoverMenu.overlayLocation, FSubmenuItem.submenuOverlayLocation and FSubmenuTile.submenuOverlayLocation.FPortalAdd FPortal.overlayLocation.
Add FPortal.traversalGrouped.
Fix FPortal content not being traversed immediately after its child.
FSelect & FMultiSelectFSelect.contentOverlayLocation and FMultiSelect.contentOverlayLocation.FSelectMenuTileFSelectMenuTile.menuOverlayLocation.FSheetAdd FModalSheetStyle.defaultBarrierFilter.
Add FModalSheetRoute.capturedScopes.
Breaking Change FModalSheetStyle.barrierFilter to accept a BuildContext.
Breaking Remove FModalSheetStyle.inherit(colors: ...). Use FModalSheetStyle.inherit() instead.
Fix showFSheet content not restyling when the theme changes while open.
FTappableAdd FTappable.onDisabledPress.
Add FTappable.semanticsTooltip.
Fix pressed effect applying to ancestor tappables when a nested tappable is pressed.
FThemeFTheme.capture and FCapturedTheme.FTimeFieldFTimeFieldPickerProperties.overlayLocation.FToast & FToasterFTooltipAdd FTooltip.overlayLocation.
Breaking Remove FTooltip.semanticsLabel. Set semanticsTooltip on the trigger instead.
Fix crash when an external focus node is reused by another widget after FAutocomplete is disposed.
FAutocompleteFAutocomplete is disposed.FAutocomplete not responding to focus changes after its focus node is swapped.FSelect & FMultiSelectFix FHeader.nested crashing when given a tight width constraint.
FHeaderFHeader.nested crashing when given a tight width constraint.### FTooltip * Add FTooltipStyle.constraints.
FTooltipFTooltipStyle.constraints.This update ships a refreshed CLI with a richer, more interactive experience, including the ability to build your own custom theme.
This update ships a refreshed CLI with a richer, more interactive experience, including the ability to build your own custom theme.
The default layouts of several widgets, such as FCard, were too hard to customize through the style API. They've
been removed and can instead be generated in your project with the CLI or copied from forui.dev, then modified
directly.
Lastly, we've shipped several accessibility improvements as part of our ongoing effort. Most notably, all widgets now automatically reduce or disable motion to match the OS's accessibility settings.
FAccessibilityFAccessibility, FAccessibilityScope, and FAccessibilityMotion.FAccordionItemChange FAccordionItem to expand and collapse instantly when motion is reduced or disabled.
Fix FAccordionItem header not exposing its expanded state.
FAlertFAlert.liveRegion.FAutocompleteChange FAutocomplete to announce the number of suggestions to screen readers.
Fix FAutocomplete not exposing its expanded state to screen readers.
Fix FAutocomplete not announcing the inline completion to screen readers.
Fix FAutocomplete arrow keys not navigating past the first suggestion on web.
FAvatarChange FAvatar to skip its cross-fade when animations are disabled.
Fix FAvatarStyle.fadeInDuration being ignored.
FBadgeFBadgeContentStyle. Use FBadgeStyle.labelTextStyle and FBadgeStyle.padding instead.FBadgeStyle.contentStyle. Use FBadgeStyle.labelTextStyle and FBadgeStyle.padding instead.FBottomNavigationBar & FBottomNavigationBarItemAdd FBottomNavigationBarData.length.
Add FBottomNavigationBarItem.semanticsLabel.
Change FBottomNavigationBarItem to announce its position, e.g. "Tab 2 of 4", to screen readers.
FBreadcrumbFBreadcrumb trigger not exposing its expanded state.FCalendarAdd PageUp/PageDown, Shift+PageUp/PageDown, and Home/End keyboard navigation to the grids.
Change FCalendar to jump between pages when animations are disabled.
Improve FCalendar accessibility.
Fix calendar month/year header not exposing its expanded state.
Fix calendar days not exposing their selected state to screen readers.
FCardFCard no longer provides a built-in content layout. Generate one with the CLI or copy it from forui.dev, then
customize the widget directly instead of through the style API.
Add FCard.builder.
Add FCardStyle.titleTextStyle, FCardStyle.subtitleTextStyle, and FCardStyle.padding.
Breaking Rename FCard.raw to FCard(child: ...) instead.
Breaking Remove FCard(...). Run dart run forui snippet create instead.
Breaking Remove FCardContentStyle. Use FCardStyle.titleTextStyle, FCardStyle.subtitleTextStyle, and
FCardStyle.padding instead.
FCheckboxChange FCheckbox to swap instantly when animations are disabled.
Fix FCheckbox not exposing its checkbox role and checked state.
FCircularProgressFCircularProgress to render statically when animations are disabled.FCollapsibleFCollapsible keeping collapsed content focusable and announced by screen readers.FColorsFColors.neutralLight and FColors.neutralDark. Run
dart run forui theme create to generate a custom theme.FContextMenuChange FContextMenu to fade without scaling when motion is reduced.
Fix FContextMenu background filter overflowing its rounded bounds.
FDateFieldFDateField.calendar not displaying its selected date when driven by a lifted selection control.FDateField not dismissing its calendar on Escape while the input is focused.FDateField trigger not exposing its expanded state to screen readers.FDateSelectionControlAdd FDateSelectionControl.liftedSingle(...), FDateSelectionControl.liftedMulti(...) and
FDateSelectionControl.liftedRange(...).
Breaking Remove FDateSelectionControl.lifted(...). Use FDateSelectionControl.liftedSingle(...),
FDateSelectionControl.liftedMulti(...) or FDateSelectionControl.liftedRange(...) instead.
FDateTimePickerhour24 to bool?. Defaults to MediaQuery.alwaysUse24HourFormat.FDateTimePicker wheels to expose adjustable value and label semantics to screen readers.FDeterminateProgressChange FDeterminateProgress to jump to its value when animations are disabled.
Fix FDeterminateProgress not exposing its value to screen readers.
FDialogFDialog no longer provides a built-in content layout. Generate one with the CLI or copy it from forui.dev, then
customize the widget directly instead of through the style API.
Add FDialogStyle.titleTextStyle and FDialogStyle.bodyTextStyle.
Change FDialog to fade without scaling when motion is reduced.
Breaking Rename FDialog.raw(...) to FDialog(...).
Breaking Remove FDialog(...). Run dart run forui snippet create instead.
Breaking Remove FDialogContentStyle. Use FDialogStyle.titleTextStyle and FDialogStyle.bodyTextStyle instead.
Fix FDialog background filter overflowing its rounded bounds.
FHeaderActionAdd semanticsLabel to FHeaderAction.x.
Change FHeaderAction.back and FHeaderAction.x to default to localized semantics labels.
Fix FHeaderAction.selected not being forwarded to screen readers.
FIconsFIcons.error.FItem & FTileexpanded.FLabelFLabel to show errors instantly when motion is reduced or disabled.FLineCalendarFLineCalendar days to announce their today status and mutually exclusive selection to screen readers.FPickerAdd FPickerWheel.semanticsLabel and FPickerWheel.semanticsValueBuilder.
Change FPicker to jump to selected items when motion is reduced or disabled.
Change FPickerWheel to expose adjustable value and label semantics to screen readers.
FPopoverChange FPopover (and FSelect, FAutocomplete) to fade without scaling when motion is reduced.
Fix FPopover background filter overflowing its rounded bounds.
Fix FPopover not dismissing on Escape while focus is on the trigger.
FPopoverMenuAdd physics to FPopoverMenu and FPopoverMenu.tiles.
Fix FSubmenuItem and FSubmenuTile triggers not exposing their expanded state.
Fix FPopoverMenu background filter overflowing its rounded bounds.
FPortal & FPointPortalFPopover, FSelect, and FAutocomplete) rendering behind the soft keyboard when
shown inside a scrollable within a Material Scaffold.FProgressFProgress to render a static partial fill when animations are disabled.FRadioChange FRadio to update instantly when animations are disabled.
Fix FRadio not exposing its radio role and checked state.
FResizableFResizable resetting regions to their initial sizes when the main-axis constraint changes (e.g. window resize).FSelect & FMultiSelectFSelect and FMultiSelect trigger not exposing its expanded state.FMultiSelect not exposing its invalid state when validation fails.FSelect not opening on Space.FSelectMenuTileFSelectMenuTile trigger not exposing its expanded state.FSheet & FPersistentSheetFSheet and FPersistentSheet to cross-fade instead of sliding when motion is reduced.FSidebarItemChange FSidebarItem to reveal instantly when motion is reduced or disabled, keeping its fade under reduced.
Fix collapsible FSidebarItem not exposing its expanded state.
FSwitchFSwitch announcing its state twice to screen readers.FTabsBreaking Rename FTabsStyle.height to FTabsStyle.minHeight.
Change FTabs to switch tabs instantly when motion is reduced or disabled.
Fix FTabs clipping labels taller than the tab bar. Tabs now grow to fit the tallest label and center the rest.
FTappableAdd button, checked, expanded, hint, and inMutuallyExclusiveGroup.
Change FTappable to skip its press bounce when animations are disabled.
FTextFormFieldFTextFormField.password(error: ...). It was erroneously included even though it did nothing.FTheme & FThemesAdd FTheme.neutral.
Breaking Remove FThemes. Use FTheme.neutral, or run dart run forui theme create to generate a custom theme.
FTimeFieldChange hour24 to bool?. Defaults to MediaQuery.alwaysUse24HourFormat.
Fix FTimeField.picker trigger not exposing its expanded state to screen readers.
FTimePickerhour24 to bool?. Defaults to MediaQuery.alwaysUse24HourFormat.FTimePicker wheels to expose adjustable value and label semantics to screen readers.FToastAdd a screen reader announcement via a live region when a toast appears.
Change toasts to appear and dismiss instantly, and to not auto-dismiss, when accessible navigation is enabled.
Change toasts to appear instantly when motion is reduced or disabled.
Change the toast stack to expand and collapse instantly when motion is reduced or disabled.
FTooltipAdd FTooltip.semanticsLabel to expose the tip to screen readers as the child's tooltip.
Change the default FTooltipStyle.hoverExitDuration to 100ms from Duration.zero.
Change FTooltip to fade without scaling when motion is reduced.
Fix FTooltip dismissing when the pointer moves from the target onto the tip.
Add italic support to the bundled Inter font.
Change form field error messages to display a leading FIcons.error icon.
Change the bundled Inter font to a variable font.
Fix focus outlines and highlights persisting after a pointer click when Flutter web semantics are enabled. Focus
decorations now follow FocusManager.highlightMode.
Breaking Change FCalendarControl to handle programmatic navigation. See FDateSelectionControl for handling date selection.
This update introduces the long-awaited context menu, a revamped calendar, and support for multiple typefaces.
FCalendar (New)FCalendar was one of the first complex widgets we implemented back in 2024, and it is showing its age. We have
re-implemented FCalendar with more selection modes, a controller for programmatic navigation, and updated styling
and an API similar to other widgets.
Add FDateSelectionControl.
Add FDateSelectionController.
Breaking Re-implement FCalendar.
Breaking Change FCalendarControl to handle programmatic navigation. See FDateSelectionControl for handling date selection.
Breaking Change FCalendarController to handle programmatic navigation. See FDateSelectionController for handling date selection.
FCheckboxfocused state.FCollapsibleFCollapsible.axis to collapse the child horizontally.FContextMenu (New)FContextMenu.FDateFieldAdd split grid and wheel calendar modes via FDateFieldGridSplitCalendarProperties and FDateFieldWheelCalendarProperties.
Add FDateField.selectionControl to control the selected date.
Add FDateField.validator as a top-level parameter.
Breaking Change FDateFieldCalendarProperties to a sealed class. Use FDateFieldGridCalendarProperties for the
default grid calendar.
Breaking Move the calendar's selectable range, today's date, dayBuilder, autoHide, popoverBuilder, and
popover positioning onto the calendar properties.
Breaking Change FDateFieldPopoverBuilder's second argument from FDateFieldController to FCalendarController.
Breaking Remove FDateFieldController and FDateFieldControl. Use FDateField.selectionControl
(FDateSelectionControl) and FDateField.validator instead.
Breaking Remove FDateField.calendar(initialType: ...).
FFormFieldFFormFieldVariant.focused.FFormFieldErrorVariant.focused.FItem & FTileFTappable-based widgets (e.g. FButton in a prefix or suffix) not receiving their own taps when the
enclosing tile is inside an FItemGroup or FTileGroup.FLineCalendarAdd FLineCalendar.selectable to determine whether a date can be selected.
Breaking Change FLineCalendarControl.managed(controller: ...) to accept FDateSelectionController<DateTime?>
instead of FCalendarController<DateTime?>.
Breaking Remove FLineCalendarControl.managed(selectable: ...). Use FLineCalendar.selectable instead.
Breaking Remove FLineCalendarControl.lifted(selectable: ...). Use FLineCalendar.selectable instead.
FLocalizationsFLocalizations.fullDate. Use DateFormat.yMMMMd instead.FLocalizations.year. Use DateFormat.y instead.FLocalizations.yearMonth. Use DateFormat.yMMMM instead.FLocalizations.abbreviatedMonth. Use DateFormat.MMM instead.FLocalizations.day. Use DateFormat.d instead.FLocalizations.shortDate. Use DateFormat.yMd instead.FPointPortal (New)FPointPortal.FRadiofocused state.FResizableAdd FResizableRegion.flex(...) for proportionally-sized regions.
Breaking Change FResizableRegion to a sealed class with FResizableRegion.fixed(...) and
FResizableRegion.flex(...).
Breaking Rename FResizableRegion(...) to FResizableRegion.fixed(...).
Breaking Rename FResizableRegion.region(...) to FResizableRegion.fixed(...).
Breaking Rename FResizableRegion(initialExtent: ...) to FResizableRegion.fixed(extent: ...).
FSelect & FMultiSelectAdd support for styling the label in the focused state.
Fix FMultiSelect retaining the highlight on the first item instead of the last tapped item.
FSelectMenuTilefocused state.FSwitchAdd support for styling the label in the focused state.
Fix FSwitch throwing when a focusNode is provided.
Fix FSwitch registering two focus nodes, causing it to be a duplicate stop when tabbing through.
FTappable & FTappableGroupFTappable throwing a null check error when unmounted mid-gesture inside an FTappableGroup.FTypography & FTypefaceWe've added support for multiple typefaces by introducing a FTypeface that contains a text scale and changing
FTypography to contain a display and body typeface.
Add FTypeface, a single typeface's text scale.
Add FTypeface.fontFamilyFallback.
Add FTypography.body and FTypography.display typefaces.
Breaking Split FTypography into two FTypefaces. Replace typography.<token> with typography.body.<token>
(e.g. typography.sm becomes typography.body.sm).
Breaking Rename FTypographyExtension to FScalableExtension.
Relax SDK constraints to allow Flutter and Dart beta/pre-release versions.
Relax SDK constraints to allow Flutter and Dart beta/pre-release versions.
FSelect & FMultiSelectFSelect & FMultiSelect's popovers causing ancestor scrollables to jump when opened.Add FAutocomplete.onItemPress callback.
FAutocompleteFAutocomplete.onItemPress callback.Fix icon-mapping CLI snippet referencing Lucide brand icons removed in 0.22.0.
icon-mapping CLI snippet referencing Lucide brand icons removed in 0.22.0.Breaking Change FAccordionItem.icon from Widget to Widget?. Defaults to FIcons.chevronDown.
FAccordionItemFAccordionItem.icon from Widget to Widget?. Defaults to FIcons.chevronDown.FAlertAdd FAlert.clipBehavior to clip the alert's content to the inner path of its decoration. Defaults to Clip.none.
Breaking Change FAlert.icon from Widget to Widget?. Defaults to FIcons.circleAlert.
FAutocompleteAdd FAutocomplete.text(...).
Add FAutocomplete.textBuilder(...).
Add FAutocomplete.format.
Add FAutocomplete.parse.
Breaking Add FAutocompleteContentStyle parameter to FAutocomplete.contentErrorBuilder callback.
Breaking Change FAutocomplete to FAutocomplete<T>.
Breaking Change FAutoCompleteContentBuilder to FAutocompleteContentBuilder<T>.
Change FAutocomplete.contentLoadingBuilder to nullable; pass null to hide the popover while loading.
Change FAutocomplete.contentEmptyBuilder to nullable; pass null to hide the popover when there are no results.
Change FAutocomplete.contentErrorBuilder; pass null to hide the popover when there is an error.
Fix FAutocomplete not showing context menu by default.
Fix FAutocomplete not notifying control's onChange callback when a suggestion is selected via tap or tab completion.
Fix FAutocomplete committing the first suggestion when TextInputAction.next or Tab is pressed while the popover
is open and no inline typeahead completion is available.
Fix FAutocomplete popover staying open after Tab moves focus to another form field.
FAvatarFAvatarStyle.fallbackIcon. Defaults to FIcons.userRound.FBreadcrumbAdd icon parameter to FBreadcrumbItem.collapsed and FBreadcrumbItem.collapsedTiles. Defaults to
FIcons.ellipsis.
Change FBreadcrumb.divider default to resolve from FIcons.chevronRight.
Breaking Change FBreadcrumbItem.cacheExtent to FBreadcrumbItem.scrollCacheExtent.
FButtonFButton announcing both semanticsLabel and child semantics when semanticsLabel is set.FCalendarFCalendarHeaderStyle.previousIcon, FCalendarHeaderStyle.toggleIcon, and
FCalendarHeaderStyle.nextIcon. Defaults to FIcons.chevronLeft and FIcons.chevronRight.FCardFCard.clipBehavior to clip the card's content to the inner path of its decoration. Defaults to Clip.none.FCheckboxFCheckboxStyle.icon. Defaults to FIcons.check.FCircularProgressFCircularProgress.icon from IconData to FIconBuilder. The default, .loader, and
.pinwheel constructors resolve their icon from FIcons at build time.FColorsThemeExtension support via FColors(extensions: ...), FColors.extension<T>(), and FColors.extensions.FDateFieldFDateField.defaultIconBuilder to resolve the calendar icon from FIcons.calendar.FDateField date format localizations to match CLDR 42.FDialogFDialog.resizeToAvoidInsets to opt out of view insets padding.FDialog.clipBehavior to clip the dialog's content to the inner path of its decoration. Defaults to Clip.none.FHeaderActionChange FHeaderAction.back and FHeaderAction.x to resolve their icons from FIcons.arrowLeft and FIcons.x.
Fix FHeaderAction.style type from FHeaderActionStyle? to FHeaderActionStyleDelta.
FIconsAdd FIcons, a set of semantic icon tokens exposed via FThemeData.icons. This allows the icons used by widgets to be
customized globally. Defaults to Lucide-backed set, FIcons.lucide().
FIconBuilder typedef and FIcons.iconData helper for wrapping an IconData as a builder.FItem & FItemGroupBreaking Change FItemGroup.cacheExtent to FItemGroup.scrollCacheExtent.
Breaking Remove FItemContentStyle.inherit(suffixedPadding: ...) and
FItemContentStyle.inherit(unsuffixedPadding: ...). Padding is now inlined based on the new touch parameter.
Breaking Remove FRawItemContentStyle.inherit(padding: ...). Padding is now inlined based on the new touch
parameter.
Breaking Rename FItemStyle.rawItemContentStyle to FItemStyle.rawContentStyle.
Breaking Rename FItemStyle.margin to FItemStyle.padding.
Breaking Rename FItemStyle.decoration to FItemStyle.contentDecoration.
Remove FItemStyle.menuInsets(...). Use FItemContentStyle.inherit(touch: ...) and
FRawItemContentStyle.inherit(touch: ...) instead.
Remove FItemStyle.selectInsets(...). Use FItemContentStyle.inherit(touch: ...) and
FRawItemContentStyle.inherit(touch: ...) instead.
Fix FItemGroup content not clipping properly at rounded corners.
FLineCalendarAdd FLineCalendarScrollControl.
Add FLineCalendarScrollController.
Add FLineCalendar.scrollControl.
Breaking Move FLineCalendar.start, end, today, initialScroll, and initialScrollAlignment to
FLineCalendarScrollControl.managed(...).
Breaking Rename FLineCalendar.cacheExtent to FLineCalendar.scrollCacheExtent.
FPaginationAdd settable FPaginationController.pages, FPaginationController.siblings, and FPaginationController.showEdges.
Change FPagination.previous and FPagination.next defaults to resolve from FIcons.chevronLeft and
FIcons.chevronRight.
FPopoverFPopover.popoverClipBehavior to clip the popover's content to the inner path of its decoration. Defaults to
Clip.none.FPopoverMenuAdd FSubmenuItem.submenuHideRegion.
Add FSubmenuTile.submenuHideRegion.
Change FSubmenuItem.suffix and FSubmenuTile.suffix defaults to resolve from FIcons.chevronRight.
Breaking Change FPopoverMenu.cacheExtent to FPopoverMenu.scrollCacheExtent.
Breaking Change FSubmenuItem.submenuCacheExtent to FSubmenuItem.submenuScrollCacheExtent.
Breaking Change FSubmenuTile.submenuCacheExtent to `FSubmenuItem.submenuScrollCacheExtent.
Fix FPopoverMenu content not clipping properly at rounded corners.
FResizableAdd FResizableDividerStyle.hapticFeedback. Defaults to FHapticFeedback.lightImpact.
Add FResizableController.hapticFeedbackVelocity. Defaults to 6.5.
Breaking Add FResizableDividerThumbStyle.icon. Defaults to FIcons.gripVertical (horizontal axis) or
FIcons.gripHorizontal (vertical axis).
Change FResizableStyles.inherit(...) to require a hapticFeedback parameter.
Fix horizontal FResizable not mirroring under TextDirection.rtl.
FSelect & FMultiSelectAdd FSelect.retainFocus. Defaults to true on desktop and false on touch.
Breaking Add FMultiSelectFieldStyle.clearIcon. Defaults to FIcons.x.
Breaking Add FMultiSelectTagStyle.icon. Defaults to FIcons.x.
Breaking Add FSelectScrollHandleStyle.upIcon and FSelectScrollHandleStyle.downIcon. Defaults to
FIcons.chevronUp and FIcons.chevronDown.
Change FSelect.defaultIconBuilder and FMultiSelect.defaultIconBuilder to resolve the chevron from
FIcons.chevronDown.
Change FSelectSearchFieldProperties.defaultIconBuilder to resolve the search icon from FIcons.search.
Fix FSelect retaining field focus after an item is selected on touch devices.
FSelectMenuTileChange FSelectMenuTile.suffix default to resolve from FIcons.chevronsUpDown.
Breaking Change FSelectMenuTile.cacheExtent to FSelectMenuTile.scrollCacheExtent.
FSelectTile & FSelectTileGroupFSelectTile.checkedIcon and FSelectTile.uncheckedIcon from Widget to Widget?. Defaults
to FIcons.check; the unchecked variant is rendered transparent to preserve layout.FSelectTileGroup.cacheExtent to FSelectTileGroup.scrollCacheExtent.FSidebar & FSidebarItemFSidebarItemStyle.collapsibleIcon. Defaults to FIcons.chevronRight.FSliderAdd FSliderHaptic enum.
Add FSliderStyle.collisionHapticFeedback.
Add FSliderStyle.tickHapticFeedback.
Add FSliderController.hapticFeedbackVelocity.
Breaking Change FSliderController.slide(...) to return FSliderHaptic?.
Breaking Change FSliderController.step(...) to return bool.
Breaking Change FSliderController.tap(...) to return ({FSliderActiveThumb? thumb, bool haptic}) instead of bool?.
FStyle & FThemeDataAdd FThemeData.hapticFeedback.
Add FThemeData.icons for theming icons used by Forui widgets. See FIcons.
Add ThemeExtension support via FStyle(extensions: ...), FStyle.extension<T>(), and FStyle.extensions.
Breaking Remove FStyle.hapticFeedback. Use FThemeData.hapticFeedback instead.
Breaking Remove colors, typography, and style parameters from FThemeData.copyWith. Rebuild FThemeData
directly to change these.
FTappableonPressDown.onPressCancel.onPressMove.onPressUp.onLongPressDown.onLongPressCancel.onLongPressStart.onLongPressMove.onLongPressEnd.onDoubleTapDown.onDoubleTapCancel.onSecondaryPressDown.onSecondaryPressCancel.onSecondaryPressUp.onSecondaryLongPressDown.onSecondaryLongPressCancel.onSecondaryLongPressStart.onSecondaryLongPressMove.onSecondaryLongPressEnd.FTextFieldAdd FTextFieldStyle.constraints, enforcing a minimum height per size variant.
Change FTextField.defaultObscureIconBuilder to resolve eye icons from FIcons.eye and FIcons.eyeClosed.
Change FTextField.defaultClearIconBuilder to resolve the clear icon from FIcons.x.
FTimeFieldFTimeField.defaultIconBuilder to resolve the clock icon from FIcons.clock4.FTimeField time format localizations to match CLDR 42.FToast & FToasterAdd FToast.clipBehavior to clip the toast's content to the inner path of its decoration. Defaults to Clip.none.
Change FToasterStyle.toastAlignment default to FToastAlignment.topCenter on touch devices.
Change showFToast/showRawFToast default swipeToDismiss to derive from the resolved alignment.
FTileGroupBreaking Change FTileGroup.cacheExtent to FTileGroup.scrollCacheExtent.
Fix FTileGroup content not clipping properly at rounded corners.
FTypographyFTypographyExtension.FTypographyExtension support via FTypography(extensions: ...), FTypography.extension<T>(), and
FTypography.extensions.Change CLI to print generated file paths as file:// URIs so they are clickable in JetBrains IDEs.
Change forui theme create to split the generated theme across theme.dart, colors.dart,
typography.dart, and style.dart.
Change forui style create default output directory from lib/theme to lib/theme/styles.
Fix spurious LicenseRegistry entries, including a hyphen-only "package" name, caused by separator rows in LICENSE.
Breaking Change FDeterminateProgressMotion.duration to be the total animation duration regardless of value delta.
FDeterminateProgressBreaking Change FDeterminateProgressMotion.duration to be the total animation duration regardless of value
delta.
Fix FDeterminateProgress track fill desyncing from the value when a non-linear motion curve is used.
FHeaderFHeader ignoring FHeaderStyle.decoration on the root variant.Fix FSelectMenuTile rendering an extra border when a custom style is supplied inside a FTileGroup.
FSelectMenuTileFSelectMenuTile rendering an extra border when a custom style is supplied inside a FTileGroup.Fix FHeader.nested rendering taller than FHeader on desktop themes.
FHeaderAdd FHeaderStyle.constraints.
Fix FHeader.nested rendering taller than FHeader on desktop themes.
Breaking Change FCheckboxStyle to not extend FLabelStyle. Use FCheckboxStyle.leadingLabelStyle and FCheckboxStyle.trailingLabelStyle instead.
FTypographyAdd FTypography.defaultFontFamily static constant.
Change default leading distribution from proportional to even.
Breaking Rename FTypography.defaultFontFamily to FTypography.fontFamily.
Fix default text styles created by FTypography to include a fontFamily.
FButtonFButton(prefixBuilder: ...).FButton(suffixBuilder: ...).FButton(builder: ...).FButton.icon(builder: ...).FButtonContentBuilder typedef.FButtonIconContentBuilder typedef.FButtonContentStyle.constraints and FButtonIconContentStyle.constraints to enforce minimum size.FCheckboxAdd FCheckbox(leadingLabel: ...).
Add FCheckboxStyle.leadingLabelStyle.
Add FCheckboxStyle.trailingLabelStyle.
Breaking Change FCheckboxStyle to not extend FLabelStyle. Use FCheckboxStyle.leadingLabelStyle and
FCheckboxStyle.trailingLabelStyle instead.
FDateFieldAdd FDateField.defaultFormat.
Breaking Change FDateField.calendar(format: ...) from DateFormat? to
String Function(BuildContext, DateTime, DateFormat).
FDateTimePickerFDateTimePicker.FDateTimePickerController.FDateTimePickerStyle.FDialogWe've changed FDialog's default styling to be more aesthetically pleasing.
Add FDialog.image parameter.
Add FDialogContentStyle.titlePadding.
Add FDialogContentStyle.bodyPadding.
Add FDialogContentStyle.imageSpacing.
Add FDialogContentStyle.expandActions.
Add FDialogContentStyles extension type.
Add FDialogStyle.slidePressHapticFeedback.
Breaking Change FDialogContentStyle fields to have defaults instead of being required.
Breaking Change VerticalContent alignment from center to start.
Breaking Remove FDialogContentStyle.bodySpacing. Use FDialogContentStyle.titleSpacing instead.
FHapticFeedbackFHapticFeedback.FLabelAdd FLabelLayout enum.
Breaking Replace FLabel(axis: ...) with FLabel(layout: ...). Use FLabelLayout.horizontalEnd instead of
Axis.horizontal and FLabelLayout.vertical instead of Axis.vertical.
Breaking Replace FLabelStyles.horizontalStyle with FLabelStyles.horizontalLeadingStyle and
FLabelStyles.horizontalTrailingStyle.
FItemFInheritedItemCallbacks.FItemMixin.submenu(...) shorthand for FSubmenuItem.FItemGroupFItemGroupStyle.slidePressHapticFeedback.FLineCalendarWe've changed FLineCalendar's default styling to be more aesthetically pleasing.
Breaking Change FLineCalendarStyle.padding to FLineCalendarStyle.itemSpacing.
Fix widget inspector crashing when tapping on a line calendar item.
FRadioAdd FRadio(leadingLabel: ...).
Add FRadioStyle.leadingLabelStyle.
Add FRadioStyle.trailingLabelStyle.
Breaking Change FRadioStyle to not extend FLabelStyle. Use FRadioStyle.leadingLabelStyle and
FRadioStyle.trailingLabelStyle instead.
FPopoverAdd FPopoverStyle.motion.
Add FPopoverController.show(animated:).
Add FPopoverController.hide(animated:).
Add FPopoverController.toggle(animated:).
Breaking Remove FPopoverControl.managed(motion: ...). Configure motion via FPopoverStyle instead.
Breaking Remove FPopoverControl.lifted(motion: ...). Configure motion via FPopoverStyle instead.
Breaking Remove FPopoverController(motion: ...). Configure motion via FPopoverStyle instead.
Fix root and nested popovers with barriers incorrectly being dismissed with a single tap.
FPopoverMenuAdd FPopoverMenu.faded.
Add FPopoverMenuMotion.
Add FPopoverMenuStyle.menuMotion.
Add FSubmenuItem.
Add FSubmenuTile.
Add FPopoverMenuStyle.hoverEnterDuration.
Add FPopoverMenuStyle.minWidth.
Add FPopoverMenuStyle.hapticFeedback.
Fix FPopoverMenuStyle tiles not having a selected decoration style.
Fix FPopoverMenuStyle items not showing card background.
Fix FPopoverMenu not resetting active submenu state when menu is closed.
FTextFieldFTextFieldStyle.cursorWidth.FTextFieldStyle.cursorOpacityAnimates.FTabsAdd swipe/scroll navigation when expands is true, with BouncingScrollPhysics by default.
Add FTabs.contentPhysics to customize the content area's scroll physics.
Breaking Remove FTabs.swipeablePhysics. Use FTabs.contentPhysics instead.
FTileFTileMixin.submenu(...) shorthand for FSubmenuTile.FTileMixin.tile(variant: ...).FTileMixin.raw(variant: ...).FTileGroupFTileGroupStyle.slidePressHapticFeedback.FTimeFieldAdd FTimeField.defaultFormat.
Breaking Change FTimeField.picker(format: ...) from DateFormat? to
String Function(BuildContext, FTime, DateFormat).
FTimePickerAdd FTimePickerStyle.hapticFeedback.
Add FTimePickerStyle.hourFlex.
Add FTimePickerStyle.minuteFlex.
Add FTimePickerStyle.periodFlex.
Change FTimePickerStyle.inherit(...) to accept touch parameter.
FSliderFSliderStyle.tooltipMotion. Configure motion via FTooltipStyle.motion instead.FTooltip & FTooltipGroupAdd FTooltipStyle.hapticFeedback.
Add FTooltipStyle.motion.
Add FTooltipStyle.hoverEnterDuration.
Add FTooltipStyle.hoverExitDuration.
Add FTooltipStyle.longPressExitDuration.
Add FTooltipGroup.style.
Add FTooltipController.show(animated:).
Add FTooltipController.hide(animated:).
Add FTooltipController.toggle(animated:).
Breaking Remove FTooltipControl.managed(motion: ...). Configure motion via FTooltipStyle instead.
Breaking Remove FTooltipControl.lifted(motion: ...). Configure motion via FTooltipStyle instead.
Breaking Remove FTooltipController(motion: ...). Configure motion via FTooltipStyle instead.
Breaking Remove FTooltip(hoverEnterDuration: ...). Configure via FTooltipStyle instead.
Breaking Remove FTooltip(hoverExitDuration: ...). Configure via FTooltipStyle instead.
Breaking Remove FTooltip(longPressExitDuration: ...). Configure via FTooltipStyle instead.
Breaking Remove FTooltipGroup(hoverEnterDuration: ...). Configure via FTooltipStyle instead.
Breaking Remove FTooltipGroup(hoverExitDuration: ...). Configure via FTooltipStyle instead.
Breaking Remove FTooltipGroup(longPressExitDuration: ...). Configure via FTooltipStyle instead.
FOtpFieldFOtpField.FOverlayFOverlay.FOverlayControl.FPickerAdd FPickerStyle.hapticFeedback.
Change FPickerStyle.inherit(...) to accept touch parameter.
FPortalBreaking Replace FPortal(controller: ...) with FPortal(control: .managed(controller: ...)).
Fix portal not repositioning when the child widget changes size.
FStyleFStyle.hapticFeedback.FSwitchAdd FSwitch(leadingLabel: ...).
Add FSwitchStyle.leadingLabelStyle.
Add FSwitchStyle.trailingLabelStyle.
Breaking Change FSwitchStyle to not extend FLabelStyle. Use FSwitchStyle.leadingLabelStyle and
FSwitchStyle.trailingLabelStyle instead.
Fix onChange not being called when clearing via the clear button.
FSelectonChange not being called when clearing via the clear button.Fix SelectableText and other widgets that require an Overlay ancestor not working inside toasts.
FToasterSelectableText and other widgets that require an Overlay ancestor not working inside toasts.Fix FSelectMenuTile not inheriting the primary tile style from the parent FTileGroup.
FSelectMenuTileFSelectMenuTile not inheriting the primary tile style from the parent FTileGroup.FTileGroupFTileGroupStyle.tileStyles type to FTileStyles.Fix inconsistent border radius.
FCalendarFPortalBreaking Change FAlert.variant type from FAlertVariant? to FAlertVariant. Use FAlertVariant.primary instead of null.
This update builds upon the styling overhaul by introducing desktop and touch variants of each theme and making widget sizes consistent across each platform.
FAlertAdd FAlertVariant.primary.
Breaking Change FAlert.variant type from FAlertVariant? to FAlertVariant. Use FAlertVariant.primary instead
of null.
Breaking Change FAlertStyle.decoration type from BoxDecoration to Decoration.
FAutocompleteAdd FAutocomplete.contentCutout.
Add FAutocomplete.contentCutoutBuilder.
Add FAutocomplete.contentUseViewPadding.
Add FAutocomplete.contentUseViewInsets.
Add FAutocomplete.retainFocus.
Add FAutocomplete.popoverBuilder.
Add FAutocomplete.size.
Add FAutocompleteFieldSizeStyles.
Add FAutocompleteFieldStyle.
Change FAutocompleteFieldStyle.typeaheadTextStyle type from FVariants<..., TextStyle, ...> to
FVariants<..., TextStyle?, ...>.
Change FAutocompleteSection layout to better align with the latest shadcn version.
Breaking Rename FAutocompleteStyle.fieldStyle to FAutocompleteStyle.fieldStyles. Type changed from
FTextFieldStyle to FAutocompleteFieldSizeStyles.
Breaking Move FAutocompleteStyle.composingTextStyle and FAutocompleteStyle.typeaheadTextStyle to
FAutocompleteFieldStyle.
Breaking Remove FAutocomplete.defaultClearable. Use FTextField.defaultClearable instead.
Breaking Remove FAutocomplete.defaultBuilder. Use FTextField.defaultBuilder instead.
Breaking Remove FAutocomplete.defaultPopoverBuilder. Use FPopover.defaultPopoverBuilder instead.
Fix FAutocomplete not closing suggestions popover when pressing enter/done.
Fix FAutocomplete showing typeahead text when disabled or unfocused.
FBadgeAdd FBadgeVariant.primary.
Breaking Change FBadge.variant type from FBadgeVariant? to FBadgeVariant. Use FBadgeVariant.primary instead
of null.
Breaking Change FBadgeStyle.decoration type from BoxDecoration to Decoration.
Breaking Remove FBadgeStyles.defaultBadgeRadius. Use FBorderRadius.pill instead.
FBreadcrumbFBreadcrumbItem.collapsed(cutout: ...).FBreadcrumbItem.collapsed(cutoutBuilder: ...).FBreadcrumbItem.collapsed(intrinsicWidth: ...).FBottomNavigationBarAdd FBottomNavigationBarStyle.slideableItems for slide-across interaction.
Breaking Change FBottomNavigationBarStyle.decoration type from BoxDecoration to Decoration.
Breaking Change FBottomNavigationBarItemStyle.inherit icon and text colors/variants.
FButtonAdd FButtonVariant.primary.
Add FButtonSizeVariant.md.
Breaking Change FButton.variant type from FButtonVariant? to FButtonVariant. Use FButtonVariant.primary
instead of null.
Breaking Change FButton.size type from FButtonSizeVariant? to FButtonSizeVariant. Use FButtonSizeVariant.md
instead of null.
Breaking Change FButtonStyle.decoration type from FVariants<..., BoxDecoration, BoxDecorationDelta> to
FVariants<..., Decoration, DecorationDelta>.
FCalendarAdd FCalendarControl.defaultSelectable.
Breaking Change FCalendarStyle.decoration type from BoxDecoration to Decoration.
FCardFCardStyle.decoration type from BoxDecoration to Decoration.FCheckboxFCheckboxStyle.decoration type from FVariants<..., BoxDecoration, BoxDecorationDelta> to
FVariants<..., Decoration, DecorationDelta>.FCircularProgressAdd FCircularProgress.size.
Add FCircularProgressSizeStyles and FCircularProgressSizeVariant.
Breaking Rename FThemeData.circularProgressStyle to FThemeData.circularProgressStyles. Type changed from
FCircularProgressStyle to FCircularProgressSizeStyles.
FDeterminateProgressFDeterminateProgressStyle.trackDecoration and fillDecoration types from BoxDecoration to
Decoration.FDateFieldAdd FDateField.formFieldKey.
Add FDateFieldCalendarProperties.cutout.
Add FDateFieldCalendarProperties.cutoutBuilder.
Add FDateFieldCalendarProperties.popoverBuilder.
Add FDateFieldCalendarProperties.useViewPadding.
Add FDateFieldCalendarProperties.useViewInsets.
Add FDateField.popoverBuilder.
Add FDateField.size.
Breaking Change FDateField.prefixBuilder type from FFieldIconBuilder<FDateFieldStyle>? to
FFieldIconBuilder<FTextFieldStyle>?.
Breaking Change FDateField.suffixBuilder type from FFieldIconBuilder<FDateFieldStyle>? to
FFieldIconBuilder<FTextFieldStyle>?.
Breaking Rename FDateFieldStyle.fieldStyle to FDateFieldStyle.fieldStyles. Type changed from
FTextFieldStyle to FTextFieldSizeStyles.
Breaking Remove FDateField.defaultFieldBuilder. Use FTextField.defaultBuilder instead.
Breaking Remove FDateField.defaultPopoverBuilder. Use FPopover.defaultPopoverBuilder instead.
Fix FDateField.calendar clear button not resetting controller value to null.
FDialogAdd FDialogStyle.slideableActions for slide-across interaction between dialog actions.
Breaking Change FDialogStyle.decoration type from BoxDecoration to Decoration.
FHeaderAdd FHeaderVariant.root.
Add FHeaderStyle.slidableActions for slide-across interaction between header actions.
Breaking Change FHeaderStyle.decoration type from BoxDecoration to Decoration.
FItem & FItemGroupAdd FItemVariant.primary.
Add FItem.onDoubleTap.
Add FItemGroup.intrinsicWidth.
Add FItemStyle.shape for clipping items.
Add FItemGroupStyle.slideableItems for slide-across interaction.
Add FItemContentStyle.unsuffixedPadding.
Breaking Change FItemStyle.decoration type from FVariants<..., BoxDecoration, BoxDecorationDelta> to
FVariants<..., Decoration, DecorationDelta>.
Breaking Change FItemGroupStyle.decoration type from BoxDecoration to Decoration.
Breaking Rename FItemStyle.border to FItemStyle.shape.
Breaking Rename FItemContentStyle.padding to FItemContentStyle.suffixedPadding.
Fix FItemDivider.indented not masking the gap area with the item's background color.
Fix FItem not being clipped to its shape.
Fix FItem long press triggering an empty callback instead of falling back to onPress when onLongPress is null.
FLineCalendarAdd FLineCalendar.defaultBuilder.
Breaking Change FLineCalendarStyle.decoration type from FVariants<..., BoxDecoration, BoxDecorationDelta> to
FVariants<..., Decoration, DecorationDelta>.
FModalBarrier & FAnimatedModalBarrierAdd FModalBarrier.defaultCutoutBuilder.
Add FModalBarrier.cutout.
Add FModalBarrier.cutoutBuilder.
Add FAnimatedModalBarrier.cutout.
Add FAnimatedModalBarrier.cutoutBuilder.
Fix FModalBarrier incorrectly excluding semantics when barrier is dismissible.
FPaginationFPaginationStyle.itemDecoration type from FVariants<..., BoxDecoration, BoxDecorationDelta>
to FVariants<..., Decoration, DecorationDelta>.FPopoverAdd FPopover.cutout.
Add FPopover.cutoutBuilder.
Add FPopover.useViewPadding.
Add FPopover.useViewInsets.
Add FPopover.defaultBuilder.
Add FPopover.defaultPopoverBuilder.
Breaking Rename FPopoverStyle.viewPadding to FPopoverStyle.popoverPadding.
Breaking Change FPopoverStyle.decoration type from BoxDecoration to Decoration.
FPopoverMenuAdd FPopoverMenu.cutout.
Add FPopoverMenu.cutoutBuilder.
Add FPopoverMenu.intrinsicWidth.
Add FPopoverMenu.useViewPadding.
Add FPopoverMenu.useViewInsets.
Add FPopoverMenu.defaultItemBuilder.
Add FPopoverMenu.defaultTileBuilder.
Change FPopoverMenu to intrinsically size to menu contents.
Breaking Remove FPopoverMenu.defaultBuilder. Use FPopover.defaultBuilder instead.
FPortalAdd FPortal.useViewPadding.
Add FPortal.useViewInsets.
Add FPortal.padding.
Breaking Change FPortal.barrier type from Widget? to Widget Function(RenderBox? cutout)?.
Breaking Remove FPortal.viewInsets. Use FPortal.useViewPadding, FPortal.useViewInsets, and FPortal.padding
instead.
Fix portal not recalculating overflow whenever the child moves.
FProgressFProgressStyle.trackDecoration and fillDecoration types from BoxDecoration to Decoration.FResizableAdd FResizable.defaultLabel.
Breaking Change FResizableDividerThumbStyle.decoration type from BoxDecoration to Decoration.
FScaffoldFScaffoldStyle.headerDecoration and footerDecoration types from BoxDecoration to
Decoration.FSelect & FMultiSelectAdd FSelect.formFieldKey.
Add FMultiSelect.formFieldKey.
Add FSelect.contentCutout.
Add FSelect.contentCutoutBuilder.
Add FSelect.contentUseViewPadding.
Add FSelect.contentUseViewInsets.
Add FMultiSelect.contentCutout.
Add FMultiSelect.contentCutoutBuilder.
Add FMultiSelect.contentUseViewPadding.
Add FMultiSelect.contentUseViewInsets.
Add FSelect.popoverBuilder.
Add FMultiSelect.popoverBuilder.
Add FMultiSelect.size.
Add FMultiSelectFieldSizeStyles.
Add FSelect.size.
Add FSelectSearchFieldProperties.size.
Change FSelectSection layout to better align with the latest shadcn version.
Breaking Change FMultiSelect.prefixBuilder type from FFieldIconBuilder<FMultiSelectStyle>? to
FFieldIconBuilder<FMultiSelectFieldStyle>?.
Breaking Change FMultiSelect.suffixBuilder type from FFieldIconBuilder<FMultiSelectStyle>? to
FFieldIconBuilder<FMultiSelectFieldStyle>?.
Breaking Change FSelect.prefixBuilder type from FFieldIconBuilder<FSelectStyle>? to
FFieldIconBuilder<FTextFieldStyle>?.
Breaking Change FSelect.suffixBuilder type from FFieldIconBuilder<FSelectStyle>? to
FFieldIconBuilder<FTextFieldStyle>?.
Breaking Change FSelectSearchFieldProperties.prefixBuilder type from FFieldIconBuilder<FSelectSearchStyle>?
to FFieldIconBuilder<FTextFieldStyle>?.
Breaking Change FSelectSearchFieldProperties.suffixBuilder type from FFieldIconBuilder<FSelectSearchStyle>?
to FFieldIconBuilder<FTextFieldStyle>?.
Breaking Change FMultiSelectTagBuilder style parameter type from FMultiSelectStyle to
FMultiSelectFieldStyle.
Breaking Move FMultiSelectStyle.tagStyle to FMultiSelectFieldStyle.tagStyle.
Breaking Rename FMultiSelectStyle.fieldStyle to FMultiSelectStyle.fieldStyles. Type changed from
FMultiSelectFieldStyle to FMultiSelectFieldSizeStyles.
Breaking Rename FSelectStyle.fieldStyle to FSelectStyle.fieldStyles. Type changed from FTextFieldStyle to
FTextFieldSizeStyles.
Breaking Rename FSelectSearchStyle.fieldStyle to FSelectSearchStyle.fieldStyles. Type changed from
FTextFieldStyle to FTextFieldSizeStyles.
Breaking Remove FSelect.defaultFieldBuilder. Use FTextField.defaultBuilder instead.
Breaking Remove FSelect.defaultPopoverBuilder. Use FPopover.defaultPopoverBuilder instead.
Breaking Remove FSelect.defaultValidator. Use FFormFieldProperties.defaultValidator instead.
Breaking Remove FMultiSelect.defaultPopoverBuilder. Use FPopover.defaultPopoverBuilder instead.
Breaking Remove FMultiSelect.defaultValidator. Use FFormFieldProperties.defaultValidator instead.
Breaking Remove FSelectSearchFieldProperties.defaultClearable. Use FTextField.defaultClearable instead.
Fix FSelect and FMultiSelect autofocusing first item on touch devices.
FSidebarFSidebarStyle.decoration type from BoxDecoration to Decoration.FSelectGroupFSelectGroup.formFieldKey.FSliderAdd FSlider.formFieldKey.
Add FSlider.defaultTooltipBuilder.
Add FSlider.defaultSemanticValueFormatter.
Fix disabled slider ticks showing through active track due to transparency.
FTabsBreaking Change FTabsStyle.decoration and indicatorDecoration types from BoxDecoration to Decoration.
Fix FTabs showing Material hover overlay on tabs.
FTappable & FTappableGroupAdd FTappableGroup that enables slide-across interaction between FTappables.
Add slide-across long press support to FTappableGroup.
Add FTappable.defaultBuilder.
Breaking Change FTappableStyle.pressedEnterDuration default from 200ms to 100ms.
Breaking Change FTappableStyle.pressedExitDuration default from 0ms to 100ms.
Breaking Change FTappableMotion.bounceUpDuration default from 120ms to 100ms.
Fix incorrectly handling of platform changes.
FSelectMenuTileFSelectMenuTile.formFieldKey.FSelectMenuTile.menuCutout.FSelectMenuTile.menuCutoutBuilder.FSelectMenuTile.menuIntrinsicWidth.FSelectMenuTile.menuUseViewPadding.FSelectMenuTile.menuUseViewInsets.FSelectTileGroupFSelectTileGroup.formFieldKey.FSelectTileGroup.intrinsicWidth.FTimeFieldAdd FTimeField.formFieldKey.
Add FTimeFieldPickerProperties.cutout.
Add FTimeFieldPickerProperties.cutoutBuilder.
Add FTimeFieldPickerProperties.popoverBuilder.
Add FTimeFieldPickerProperties.useViewPadding.
Add FTimeFieldPickerProperties.useViewInsets.
Add FTimeField.clearable.
Add FTimeField.popoverBuilder.
Add FTimeField.size.
Breaking Rename FTimeFieldStyle.fieldStyle to FTimeFieldStyle.fieldStyles. Type changed from
FTextFieldStyle to FTextFieldSizeStyles.
Breaking Remove FTimeField.defaultFieldBuilder. Use FTextField.defaultBuilder instead.
Breaking Remove FTimeField.defaultPopoverBuilder. Use FPopover.defaultPopoverBuilder instead.
Fix FTimeField.picker not showing hint text when no initial time is provided.
Fix FTimeField.picker clear button not resetting controller value to null.
FTextField & FTextFormFieldAdd FTextFormField.formFieldKey.
Add FTextField.size and FTextFormField.size for sm, md, and lg size variants.
Add FTextFieldSizeStyles and FTextFieldSizeVariant.
Add FTextField.prefixIconBuilder.
Add FTextField.defaultBuilder.
Add FTextField.defaultClearable.
Add FTextField.defaultClearIconBuilder.
Add FTextField.defaultObscureIconBuilder.
Add FTextField.defaultContextMenuBuilder.
Breaking Remove FTextFormField.defaultErrorBuilder. Use FFormFieldProperties.defaultErrorBuilder instead.
Fix FTextFormField incorrectly forwarding key to inner Input widget, causing GlobalKey collisions.
Fix FTextField.clearable clear icon not appearing immediately when text changes while focused.
Fix FTextFormField.onTapOutside not being used internally.
FTheme & FBasicThemeAdd FBorderRadius with size tokens (xs, sm, md, lg, xl, xl2, xl3, pill).
Add color scheme constants to FColors.
Add FTypography.xs3.
Add FTypography.xs2.
Add FTypography.inherit(touch: ...).
Add FThemeData(touch: ...).
Re-add FColors.disable(background: ...) optional parameter for alpha-blending disabled colors against a background.
Breaking Change FThemes.*.light/dark from FThemeData to FThemes.*.*.desktop/touch.
Breaking Rename FThemeData.textFieldStyle to FThemeData.textFieldStyles. Type changed from FTextFieldStyle
to FTextFieldSizeStyles.
Breaking Change default FTheme/FBasicTheme text size from md to sm.
Breaking Change FStyle.borderRadius from BorderRadius to FBorderRadius.
Breaking Remove FLerpBorderRadius. Use BorderRadius instead.
Breaking Rename FTypography.base to FTypography.md.
Breaking Change FTypography default sizes — each token is now one level larger.
FTile & FTileGroupAdd FTileStyles.primary resolving via FItemVariant.primary.
Add FTile.onDoubleTap.
Add FTileGroup.intrinsicWidth.
Add FTileStyle.shape for clipping standalone tiles.
Add FTileGroupStyle.slideableTiles for slide-across interaction.
Breaking Change FTileGroupStyle.decoration type from BoxDecoration to Decoration.
Fix FTile long press triggering an empty callback instead of falling back to onPress when onLongPress is null.
FToastChange FToast layout to better align with the latest shadcn version.
Breaking Change FToastStyle.decoration type from BoxDecoration to Decoration.
FTooltipAdd FTooltip.useViewPadding.
Add FTooltip.useViewInsets.
Add FTooltip.defaultBuilder.
Breaking Change FTooltipStyle.decoration type from BoxDecoration to Decoration.
Add Decorations extension on Decoration for extracting common visual properties.
Add FPlatformVariantConstraint extension type.
Add Sentinels.
Add FPortal.defaultBuilder.
Add FFormFieldProperties.defaultValidator.
Change default border shape from RoundedRectangleBorder to RoundedSuperellipseBorder.
Breaking Rename desktop parameter to touch (with inverted logic) and change from bool desktop = false to
required bool touch in all .inherit() constructors and FThemeData(...).
Fix widget .inherit() constructors not using FStyle.borderWidth for BorderSide widths.
Fix FVariants.resolve returning base instead of null when a variant is explicitly set to null.
Breaking Change FThemeData variant-based field types to use wrapped extension types (FAlertStyles, FBadgeStyles, etc.).
This is a minor follow-up that adds some missing features and addresses some QoL issues discovered after the 0.18.0 release.
FAlertFAlertStyles.primary and FAlertStyles.destructive getters.FBadgeFBadgeStyles.primary, FBadgeStyles.secondary, FBadgeStyles.destructive, and FBadgeStyles.outline getters.FButtonAdd FButton.onDoubleTap callback.
Add FButtonStyles.primary, FButtonStyles.secondary, FButtonStyles.destructive, FButtonStyles.outline, and
FButtonStyles.ghost getters.
Add FButtonSizeStyles.xs, FButtonSizeStyles.sm, and FButtonSizeStyles.lg getters.
Breaking Remove FButtonSizes typedef. Use FButtonSizeStyles instead.
FDividerFDividerStyles.horizontal and FDividerStyles.vertical getters.FHeaderFHeaderAction.onDoubleTap callback.FHeaderStyles.root and FHeaderStyles.nested getters.FItemFItemStyles.primary and FItemStyles.destructive getters.FResizableFResizableAxisVariant.horizontal.FResizableStyles.horizontal and FResizableStyles.vertical getters.FSelect & FMultiSelectFMultiSelectTag.onDoubleTap callback.FSliderFSliderAxisVariant.horizontal.FSliderStyles.horizontal and FSliderStyles.vertical getters.FTappableAdd FTappable.onDoubleTap callback.
Fix bounce animation triggering for all pointer types instead of only those with matching callbacks.
Fix onVariantChange callback receiving a mutated set instead of the original previous set.
FThemeDataFThemeData variant-based field types to use wrapped extension types (FAlertStyles,
FBadgeStyles, etc.).FTileFTileStyles.primary and FTileStyles.destructive getters.FToasterdismissThreshold to showFToast, showRawFToast, and FToasterState.show.Add DecorationDelta, EdgeInsetsGeometryDelta, EdgeInsetsDelta, EdgeInsetsDirectionalDelta, and
ShapeDecorationDelta delta classes.
Breaking Change TextStyleDelta.delta(decoration: ...) from TextDecoration? to
TextDecoration? Function()?. TextDecoration is slated to become final in a future Flutter release.
Breaking Change EdgeInsets, EdgeInsetsDirectional, and EdgeInsetsGeometry fields in style deltas to accept
delta types (EdgeInsetsDelta, EdgeInsetsDirectionalDelta, EdgeInsetsGeometryDelta) instead of raw values.
Fix lifted controls causing setState() during build assertion error when used inside a Form.
setState() during build assertion error when used inside a Form.Breaking Change FDialog and FDialog.adaptive to use "primary first" action ordering. In horizontal layouts, the actions list is reversed so the primar…
This update overhauls the Styling API as outlined in Styling 2.0. It also adjusts the default styling and colors.
Simplified style modification using deltas:
// Before:
FAutocomplete(
style: (style) => style.copyWith(
contentStyle: (content) => content.copyWith(
sectionStyle: (section) => section.copyWith(
itemStyle: (item) => item.copyWith(
tappableStyle: (tappable) => tappable.copyWith(
motion: FTappableMotion.none,
),
),
),
),
),
)
// After:
FAutocomplete(
style: .delta(
contentStyle: .delta(
sectionStyle: .delta(
itemStyle: .delta(
tappableStyle: .delta(
motion: FTappableMotion.none,
),
),
),
),
),
)
FVariants replaces FWidgetStateMap with order-independent, tier-based resolution:
// Before
FWidgetStateMap({
WidgetState.hovered: A(), // Matches first for {hovered, focused}
WidgetState.hovered & .focused: B(), // Never reached
WidgetState.any: base, // Easy to omit
})
// After
FVariants(
base, // Required — no more accidentally omitted defaults
variants: {
[.hovered.and(.focused)]: A(), // More specific than .hovered alone
[.hovered]: B(), // Order doesn't matter
[.disabled]: C(), // Semantic tier always beats interaction variants, avoiding hovered from being applied when disabled.
},
)
Widget-specific variants replace WidgetStates for better type-safety and discoverability:
// Before: compiles fine, but scrolledUnder is meaningless for a tappable
FTappableStyle(
decoration: FWidgetStateMap({
WidgetState.scrolledUnder: BoxDecoration(...), // Does FTappableStyle support scrolledUnder? Who knows.
}),
)
// After:
extension type const FTappableVariant {
/// The semantic variant when this widget is disabled and cannot be interacted with.
static const disabled = FTappableVariant();
/// The interaction variant when the user drags their mouse cursor over the given widget.
static const hovered = FTappableVariant();
/// The interaction variant when the user is actively pressing down on the given widget.
static const pressed = FTappableVariant();
}
FTappableStyle(
decoration: FVariants(
const BoxDecoration(),
variants: {
[.hovered]: BoxDecoration(...), // Only FTappableVariant allowed (which works well with autocomplete)
}
),
)
Automated fixes via Data Driven Fixes are not available for most of these changes due to the tool's limitations.
FAccordionFAccordionItem.onStateChange to FAccordionItem.onVariantChange.FAlertFBadgeFBottomNavigationBarItemFBottomNavigationBarItem.onStateChange to FBottomNavigationBarItem.onVariantChange.FButtonAdd FButton.variant.
Add FButton.size.
Add FButtonSizeVariant
Add FButtonSizeVariantConstraint.
Add FButtonSizeStyles extension type.
Add FButtonSizes type alias.
Add FButtonSizesDelta type alias.
Change destructive variant to match latest shadcn/ui.
Change base FButtonStyle values to scale more appropriately with different sizes.
Change FButtonVariant.outline default background color from transparent to background.
Breaking Remove FButtonStyle.inherit. Use FButtonSizeStyles.inherit instead.
Breaking Remove FButtonContentStyle.inherit. Construct FButtonContentStyle directly instead.
Breaking Remove FButtonIconContentStyle.inherit. Construct FButtonIconContentStyle directly instead.
Breaking Rename FButton.onStateChange to FButton.onVariantChange.
Breaking Rename FButtonData.states to FButtonData.variants.
Fix FButton not having default styles for selected state.
FCalendarcard.FCardcard.FCircularProgressFCircularProgress.loader(icon: ...). This shouldn't have been included.FCircularProgress.pinwheel(icon: ...). This shouldn't have been included.FDateFieldFDateFieldStyle.selectFieldStyle to FDateFieldStyle.fieldStyle.FDateFieldStyle.iconStyle. Use nested FDateFieldStyle.fieldStyle.iconStyle instead.FDialogAdd FDialogContentStyle.titleSpacing, FDialogContentStyle.bodySpacing, and FDialogContentStyle.contentSpacing.
Change default styling to be more visually pleasing.
Breaking Change FDialog and FDialog.adaptive to use "primary first" action ordering. In horizontal layouts,
the actions list is reversed so the primary action is at the end.
Breaking Change showFDialog's style parameter from FDialogStyle Function(FDialogStyle)? to FDialogStyleDelta?.
Breaking Change showFDialog's routeStyle parameter from FDialogRouteStyle Function(FDialogRouteStyle)? to
FDialogRouteStyleDelta?.
FSheet & FPersistentSheetshowFSheet's style parameter from FModalSheetStyle Function(FModalSheetStyle)? to
FModalSheetStyleDelta?.showFPersistentSheet's style parameter from FPersistentSheetStyle Function(FPersistentSheetStyle)?
to FPersistentSheetStyleDelta?.FHeaderActionFHeaderAction.onStateChange to FHeaderAction.onVariantChange.FLabelFLabelMotion.FItem & FItemGroupAdd destructive FItem variant.
Add default styling for selected FItems.
Breaking Change FItemGroupStyle.itemStyle to FItemStyles instead of FItemStyle.
Breaking Change FItemData.style to FItemStyles? instead of FItemStyle?.
Breaking Change FInheritedItemData.merge(style: ...) to FInheritedItemData.merge(styles: ...).
Breaking Change FItemContentStyle.inherit(...) signature.
Breaking Change FRawItemContentStyle.inherit(...) signature.
Breaking Rename FItem.onStateChange to FItem.onVariantChange.
FPickerFPopovercard.FPopoverController(motion: ...) from FPopoverMotion to FPopoverMotionDelta.FRadioAdd transition between different states.
Add FRadioMotion.transitionDuration.
Add FRadioMotion.transitionCurve.
Breaking Rename FRadioMotion.duration to FRadioMotion.selectDuration.
Breaking Rename FRadioMotion.reverseDuration to FRadioMotion.unselectDuration.
Breaking Rename FRadioMotion.curve to FRadioMotion.selectCurve.
FSelect & FMultiSelectBreaking Add enabled parameter to FMultiSelectTagBuilder.
Change default background color to card.
Breaking Change FMultiSelectFieldStyle.iconStyle type from IconThemeData to FWidgetStateMap<IconThemeData>.
Wrap existing values with .all(...), e.g. .all(IconThemeData(...)).
Breaking Change FSelectSearchFieldProperties.autofocus to default to true on desktop and false on touch devices.
Breaking Rename FSelectStyle.selectFieldStyle to FSelectStyle.fieldStyle.
Breaking Rename FSelectSearchStyle.textFieldStyle to FSelectSearchStyle.fieldStyle.
Breaking Remove FSelectStyle.iconStyle. Use FSelectStyle.fieldStyle.iconStyle instead.
Breaking Remove FSelectSearchStyle.iconStyle. Use FSelectSearchStyle.fieldStyle.iconStyle instead.
Breaking Rename FMultiSelectTag.onStateChange to FMultiSelectTag.onVariantChange.
Unmark FSelect.contentScrollHandle as deprecated.
Fix search field not receiving focus when popover opens even with FSelectSearchFieldProperties.autofocus set to true.
Fix FMultiSelect still allowing tags to be removed when disabled.
FSelectGroupAdd transition between different states.
Fix FSelectGroupItems not inheriting disabled and error state from FSelectGroup.
FSelectTileFSelectTile.onStatesChange to FSelectTile.onVariantChange.FSidebarFSidebarGroup.onActionStateChange to FSidebarGroup.onActionVariantChange.FSidebarItem.onStateChange to FSidebarItem.onVariantChange.FSliderFSlider's default error style to not affect the entire slider.FTabsAdd FTabs.expands.
Change FTabController(motion: ...) from FTabMotion to FTabMotionDelta.
FTappableAdd FTappableMotion.bounceFloor to limit maximum shrink to an absolute pixel value regardless of widget size.
Breaking Change FTappableVariantChangeCallback signature from void Function(Set<FTappableVariant>) to
void Function(Set<FTappableVariant> previous, Set<FTappableVariant> current).
Breaking Rename FTappable.onStateChange to FTappable.onVariantChange.
Fix disabled FTappable still being able to receive focus.
FTile & FTileGroupAdd destructive FTile variant.
Add FTileContentStyle.
Add FRawTileContentStyle.
Add FTileStyles.
Change default background color to card.
Breaking Rename FTile.onStateChange to FTile.onVariantChange.
Breaking Change FTileGroupStyle.tileStyle to FTileGroupStyle.tileStyles (FTileStyles instead of FTileStyle).
FTextField & FTextFormFieldAdd FTextFieldStyle.iconStyle.
Change default cursor color from blue to primary.
Change default background color to card.
Change FTextFieldStyle.clearButtonStyle to not bounce by default.
Change FTextFieldStyle.obscureButtonStyle to not bounce by default.
Breaking Change FTextFieldStyle.fillColor to color.
Breaking Change FFieldBuilder to use Set<FTextFieldVariant> instead of Set<WidgetState>.
Breaking Change FFieldIconBuilder to use Set<FTextFieldVariant> instead of Set<WidgetState>.
Breaking Change FPasswordFieldIconBuilder to use Set<FTextFieldVariant> instead of Set<WidgetState>.
Breaking Remove FTextField.statesController.
Breaking Remove FTextFormField.statesController.
Breaking Remove FTextFieldStyle.filled.
FTheme & FThemesAdd FThemes.neutral.
Add FTheme.textDirection.
Add FTheme.tooltipGroupActiveDuration.
Add FBasicTheme.tooltipGroupActiveDuration.
Add FThemeData.itemStyles.
Add FThemeData.tileStyles.
Add FColors.card.
Add FColors.lerpColor(...).
Breaking Change FThemes colors to match latest shadcn/ui.
Breaking Rename FTheme to FBasicTheme.
Breaking Rename FAnimatedTheme to FTheme.
Breaking Rename FAnimatedThemeMotion to FThemeMotion.
Breaking Change FThemeData.copyWith(...) to accept Deltas instead of callbacks.
Breaking Change FColors.disabledOpacity to be a multiplicative factor rather than an absolute opacity value.
Breaking Change FColors.disable to multiply the color's existing opacity by disabledOpacity instead of
alpha-blending against a background.
FTooltipAdd FTooltipGroup for grouping tooltips so subsequent ones appear instantly after the first.
Change default background color to card.
Change FTooltip fields to be nullable and inherit from the enclosing FTooltipGroup.
Change FTooltipController(motion: ...) from FTooltipMotion to FTooltipMotionDelta.
FTimeFieldChange error message when localizations are missing to be more descriptive.
Breaking Rename FTimeFieldStyle.selectFieldStyle to FTimeFieldStyle.fieldStyle.
Breaking Remove FTimeFieldStyle.iconStyle. Use FTimeFieldStyle.fieldStyle.iconStyle instead.
Fix FTimeField incorrectly handling traversal when no localizations are provided.
FTimePickerFToastcard.FToastAlignment from an enum to final class to allow fine-grained control over positioning.Change all widget styles to implement their widget-specific delta types.
Breaking Change all widget style parameters from callback type FXxxStyle Function(FXxxStyle)? to delta type
FXxxStyleDelta?. Pass a style or .delta(param: value) to partially modify specific properties.
Breaking Change copyWith for all styles to uses delta instead of callbacks for nested styles/motions, sentinel
values for nullable fields.
Breaking Replace all instances of FWidgetStateMap with FVariants.
Breaking Remove call method from all styles.
Breaking Remove FWidgetStatesDelta.
Breaking Remove FValueNotifier - use ValueNotifier instead.
Fix default styles across various widgets incorrectly using primary color.
Fix CLI incorrectly parsing FStyle.
Fix banner image.
Fix banner image.
Breaking Change FAutocompleteContentStyle to extend FPopoverStyle.
This update overhauls the API by introducing controls to support declarative state and adding support for the new dot-shorthand syntax.
To simplify updating to the latest version, we've included Data Driven Fixes.
This allows you to run automated fixes on your codebase to update it to be compatible with the latest version of forui.
After updating to the latest version, run:
dart fix --apply
FAccordionAdd FAccordionControl.
Breaking Remove FAccordion.controller. Use FAccordion(control: .managed(...)) instead.
Fix FAccordionItem not being properly disposed.
FAutocompleteAdd FAutocomplete.popoverControl.
Add FAutocompleteControl.
Add FAutocompleteItemMixin.item(...).
Add FAutocompleteItemMixin.raw(...).
Add FAutocompleteItemMixin.section(...).
Add FAutocompleteItemMixin.richSection(...).
Add FAutocompleteItem.item(...).
Add FAutocomplete.contentGroupId.
Breaking Rename FAutocomplete.anchor to FAutocomplete.contentAnchor.
Breaking Rename FAutocomplete.popoverConstraints to FAutocomplete.contentConstraints.
Breaking Rename FAutocomplete.spacing to FAutocomplete.contentSpacing.
Breaking Rename FAutocomplete.shift to FAutocomplete.contentOverflow.
Breaking Rename FAutocomplete.offset to FAutocomplete.contentOffset.
Breaking Rename FAutocomplete.hideRegion to FAutocomplete.contentHideRegion.
Breaking Rename FAutocomplete.onTapHide to FAutocomplete.contentOnTapHide.
Breaking Remove FAutocomplete.controller. Use FAutocomplete(control: .managed(...)) instead.
Breaking Remove FAutocomplete.initialText. Use FAutocomplete(control: .managed(...)) instead.
Breaking Remove FAutocompleteController.vsync. Use FAutocomplete(popoverControl: ...) instead.
Breaking Remove FAutocompleteController.popoverMotion. Use FAutocomplete(popoverControl: .managed(motion: ...)) instead.
Breaking Remove FAutocompleteController.content. Use FAutocomplete(popoverControl: .managed(controller: ...)) instead.
Breaking Remove FAutocompleteControl.lifted(popoverShown: ...). Use FAutocomplete(popoverControl: .lifted(...)) instead.
Breaking Remove FAutocompleteControl.lifted(onPopoverChange: ...). Use FAutocomplete(popoverControl: .lifted(...)) instead.
Breaking Remove FAutocompleteControl.lifted(motion: ...). Use FAutocomplete(popoverControl: .managed(motion: ...)) instead.
Breaking Remove FAutocompleteControl.managed(motion: ...). Use FAutocomplete(popoverControl: .managed(motion: ...)) instead.
Breaking Change FAutocompleteContentStyle to extend FPopoverStyle.
Breaking Remove FAutocompleteStyle.popoverStyle - use FAutocompleteStyle.contentStyle instead.
FBottomNavigationBarAdd FBottomNavigationBar.safeAreaTop.
Add FBottomNavigationBar.safeAreaBottom.
Change FBottomNavigationBarItem.label to be optional.
FBreadcrumbFBreadcrumb.shift to FBreadcrumb.overflow.FBreadcrumbItem.collapsed(popoverController: ...). Use FBreadcrumbItem.collapsed(popoverControl: .managed(...)) instead.FBreadcrumbItem.collapsedTiles(popoverController: ...). Use FBreadcrumbItem.collapsedTiles(popoverControl: .managed(...)) instead.FCalendarUnfortunately, FCalendar cannot be easily migrated using data driven fixes due to the complexity of its API changes.
Add FCalendarControl.
Breaking Rename FCalendarController.date(initialSelection: ...) to FCalendarController.date(initial: ...).
Breaking Rename FCalendarController.dates(initialSelections: ...) to FCalendarController.dates(initial: ...).
Breaking Rename FCalendarController.range(initialSelection: ...) to FCalendarController.range(initial: ...).
Breaking Remove FCalendar.controller. Use FCalendar(control: .managedDate(...)) instead.
FCardFCard.mainAxisSize, which defaults to MainAxisSize.min.FCheckboxFCheckbox.grouped(...). Use FSelectGroupItemMixin.checkbox(...) instead.FDateFieldAdd FDateFieldControl.
Add FDateField(popoverControl: ...).
Add FDateField.calendar(popoverControl: ...).
Add FDateField.calendar(groupId: ...).
Add FDateFieldCalendarProperties.groupId.
Change FDateField's input to preserve text selection when changing dates programmatically or via the calendar.
Breaking Rename FDateField.shift to FDateField.overflow.
Breaking Rename FDateFieldCalendarProperties.inputAnchor to FDateFieldCalendarProperties.fieldAnchor.
Breaking Rename FDateField.calendar(inputAnchor: ...) to FDateField.calendar(fieldAnchor: ...).
Breaking Rename FDateFieldController.calendar to FDateFieldController.popover.
Breaking Rename FDateFieldController(initialDate: ...) to FDateFieldController(date: ...).
Breaking Remove FDateField.controller. Use FDateField(control: .managed(controller: ...)) instead.
Breaking Remove FDateField.initialDate. Use FDateField(control: .managed(initial: ...)) instead.
Breaking Remove FDateField.onChange. Use FDateField(control: .managed(onChange: ...)) instead.
Breaking Remove FDateFieldController(vsync: ..., popoverMotion: ...). Use FDateField(popoverControl: ...) instead.
Breaking Remove FDateFieldController(truncateAndStripTimezone: ...).
FItem & FItemGroupFItemMixin.tile(...).FItemMixin.raw(...).FItemGroup.group(...).FItemGroupMixin.group(...).FItemGroupMixin.builder(...).FItemGroupMixin.merge(...).FLineCalendarAdd FLineCalendarControl.
Breaking Remove FLineCalendar.controller. Use FLineCalendar(control: .managed(controller: ...)) instead.
Breaking Remove FLineCalendar.initialSelection. Use FLineCalendar(control: .managed(initial: ...)) instead.
Breaking Remove FLineCalendar.onChange. Use FLineCalendar(control: .managed(onChange: ...)) instead.
Breaking Remove FLineCalendar.toggleable. Use FLineCalendar(control: .managed(toggleable: ...)) instead.
Fix FLineCalendar not respecting FCalendarcontroller.selectable.
FPaginationAdd FPaginationControl.
Breaking Remove FPagination.controller. Use FPagination(control: .managed(controller: ...)) instead.
Breaking Remove FPagination.initialPage. Use FPagination(control: .managed(initialPage: ...)) instead.
Breaking Remove FPagination.pages. Use FPagination(control: .managed(pages: ...)) instead.
Breaking Remove FPagination.onChange. Use FPagination(control: .managed(onChange: ...)) instead.
Breaking Change FPaginationController to extend ValueNotifier<int> instead of FChangeNotifier.
Breaking Rename FPaginationController(initialPage: ...) to FPaginationController(page: ...).
Breaking Rename FPaginationController.page to FPaginationController.value.
FPickerAdd FPickerControl.
Add FPickerController.animateTo(...).
Breaking Rename FPickerController(initialIndexes: ...) to FPickerController(indexes: ...).
Breaking Remove FPicker.controller. Use FPicker(control: .managed(...)) instead.
Breaking Remove FPicker.onChange. Use FPicker(control: .managed(...)) instead.
FPopoverAdd FPopoverControl.
Add FPopoverController.shown.
Breaking Change FPopover.shift to FPopover.overflow.
Breaking Remove FPopover.controller. Use FPopover(control: .managed(...)) instead.
Fix FPopover not interrupting ongoing animations when toggled again.
FPopoverMenuFPopoverMenu.shift to FPopoverMenu.overflow.FPopoverMenu.popoverController. Use FPopoverMenu(control: .managed(...)) instead.FPortalAdd FPortalSpacing.spacing(...).
Breaking Rename FPortalBox to FPortalRect.
Breaking Rename FPortalChildBox to FPortalChildRect.
Breaking Rename FPortalShift to FPortalOverflow.
Breaking Change FPortalShift from a function to a class. While this makes custom shift implementations slightly
more verbose, it allows the consts to synergize with dot shorthands.
Breaking Rename FPortalShift.along to FPortalShift.slide.
Breaking Rename FPortal.shift to FPortal.overflow.
Breaking Rename FPortalSpacing.resolve to FPortalSpacing.call.
FRadioFRadio.grouped(...). Use FSelectGroupItemMixin.radio(...) instead.FResizableAdd FResizable.region(...).
Add FResizableControl.
Add FResizableManagedControl.
Breaking Remove FResizable.controller. Use FResizable(control: .managed(...)) or FResizable(control: .managedCascade(...)) instead.
Breaking Remove FResizable.onChange. Use FResizable(control: .managed(...)) instead.
FSelect & FMultiSelectAdd FSelectControl.
Add FSelectItemMixin.item(...).
Add FSelectItemMixin.raw(...).
Add FSelectItemMixin.section(...).
Add FSelectItemMixin.richSection(...).
Add FSelectItem.item(...).
Add FSelect.contentGroupId.
Add FMultiSelect.contentGroupId.
Breaking Rename FSelect.anchor to FSelect.contentAnchor.
Breaking Rename FSelect.popoverConstraints to FSelect.contentConstraints.
Breaking Rename FSelect.spacing to FSelect.contentSpacing.
Breaking Rename FSelect.shift to FSelect.contentOverflow.
Breaking Rename FSelect.offset to FSelect.contentOffset.
Breaking Rename FSelect.hideRegion to FSelect.contentHideRegion.
Breaking Remove FSelect.controller. Use FSelect(control: .managed(...)) instead.
Breaking Remove FSelect.onChange. Use FSelect(control: .managed(...)) instead.
Breaking Remove FSelect.initialValue. Use FSelect(control: .managed(...)) instead.
Breaking Remove FSelectController(vsync: ..., popoverMotion: ...). Use FSelect(popoverControl: ...) instead.
Breaking Remove FSelectSearchFieldProperties.controller. Use FSelectSearchFieldProperties(control: .managed(...)) instead.
Breaking Rename FMultiSelect.anchor to FMultiSelect.contentAnchor.
Breaking Rename FMultiSelect.popoverConstraints to FMultiSelect.contentConstraints.
Breaking Rename FMultiSelect.spacing to FMultiSelect.contentSpacing.
Breaking Rename FMultiSelect.shift to FMultiSelect.contentOverflow.
Breaking Rename FMultiSelect.offset to FMultiSelect.contentOffset.
Breaking Rename FMultiSelect.hideRegion to FMultiSelect.contentHideRegion.
Breaking Remove FMultiSelect.controller. Use FMultiSelect(control: .managed(...)) instead.
Breaking Remove FMultiSelect.onChange. Use FMultiSelect(control: .managed(...)) instead.
Breaking Remove FMultiSelect.initialValue. Use FMultiSelect(control: .managed(...)) instead.
Breaking Remove FMultiSelect.min. Use FMultiSelect(control: .managed(...)) instead.
Breaking Change FSelectContentStyle to extend FPopoverStyle.
Breaking Remove FSelectStyle.popoverStyle - use FSelectStyle.contentStyle instead.
Breaking Remove FMultiSelectStyle.popoverStyle - use FMultiSelectStyle.contentStyle instead.
Breaking Remove FMultiSelect.max. Use FMultiSelect(control: .managed(...)) instead.
Breaking Remove FMultiSelectController. Use FMultiValueNotifier instead.
Fix FSelect.mouseCursor defaulting to SystemMouseCursors.click instead of MouseCursor.defer.
Deprecate FSelect.contentScrollHandles. Please open an issue if you use & and need this.
FSelectGroup & FSelectTileGroupAdd FSelectGroupItemMixin.checkbox(...).
Add FSelectGroupItemMixin.radio(...).
Breaking Remove FSelectGroup.controller. Use FSelectGroup(control: .managed(...)) instead.
Breaking Remove FSelectGroup.onChange. Use FSelectGroup(control: .managed(...)) instead.
Breaking Remove FSelectGroup.onSelect.
Breaking Remove FSelectGroupController. Use FMultiValueNotifier instead.
Breaking Rename FSelectGroupItem to FSelectGroupItemMixin.
FSelectMenuTileAdd FSelectMenuTile.menuGroupId.
Breaking Rename FSelectMenuTile.shift to FSelectMenuTile.menuOverflow.
Breaking Rename FSelectMenuTile.spacing to FSelectMenuTile.menuSpacing.
Breaking Rename FSelectMenuTile.offset to FSelectMenuTile.menuOffset.
Breaking Rename FSelectMenuTile.hideRegion to FSelectMenuTile.menuHideRegion.
Breaking Rename FSelectMenuTile.onTapHide to FSelectMenuTile.menuOnTapHide.
Breaking Rename FSelectMenuTile.focusNode to FSelectMenuTile.menuFocusNode.
Breaking Rename FSelectMenuTile.onFocusChange to FSelectMenuTile.menuOnFocusChange.
Breaking Rename FSelectMenuTile.traversalEdgeBehavior to FSelectMenuTile.menuTraversalEdgeBehavior.
Breaking Rename FSelectMenuTile.barrierSemanticsLabel to FSelectMenuTile.menuBarrierSemanticsLabel.
Breaking Rename FSelectMenuTile.barrierSemanticsDismissible to FSelectMenuTile.menuBarrierSemanticsDismissible.
Breaking Remove FSelectMenuTile.selectController. Use FSelectMenuTile(selectControl: .managed(...)) instead.
Breaking Remove FSelectMenuTile.popoverController. Use FSelectMenuTile(popoverControl: .managed(...)) instead.
Breaking Remove FSelectMenuTile.onChange. Use FSelectMenuTile(selectControl: .managed(...)) instead.
Breaking Remove FSelectMenuTile.initialValue. Use FSelectMenuTile(selectControl: .managed(...)) instead.
Breaking Remove FSelectMenuTile.onSelect.
Breaking Remove FSelectMenuTileController. Use FMultiValueNotifier instead.
FSelectTileGroupFSelectTileGroupController. Use FMultiValueNotifier instead.FSelectGroupController. Use FMultiValueNotifier instead.FSelectTileGroup.selectController. Use FSelectTileGroup(control: .managed(...)) instead.FSelectTileGroup.onChange. Use FSelectTileGroup(control: .managed(...)) instead.FSelectTileGroup.onSelect.FScaffoldFToaster from FScaffold. This was causing toasts to be cleared when switching between pages.
Use FToaster directly instead.FSheetshowFSheet(resizeToAvoidBottomInset: ...). Set to false to restore previous behavior.showFPersistentSheet(resizeToAvoidBottomInset: ...). Set to false to restore previous behavior.FModalSheetRoute.resizeToAvoidBottomInset. Set to false to restore previous behavior.FSliderAdd FSlider.onEnd.
Add FSliderMark.mark(...).
Add FSliderControl.
Add FSliderManagedControl.
Breaking Rename FSliderSelection to FSliderValue.
Breaking Remove FSliderController.tooltips. Use FSlider.tooltipControls. instead.
Breaking Remove FSliderTooltipsController. Use FSliderTooltipControls instead.
Breaking Remove FSlider.controller. Use FSlider(control: .managed(...)) instead.
Breaking Remove FSlider.onChange. Use FSlider(control: .managed(...)) instead.
Breaking Remove FSlider.initialSelection. Use FSlider(control: .managed(...)) instead.
FTabsAdd FTabControl.
Add FTabEntry.entry(...).
Add FTabs.mouseCursor.
Breaking Remove FTabs.controller. Use FTabs(control: .managed(...)) instead.
Breaking Remove FTabs.initialIndex. Use FTabs(control: .managed(...)) instead.
Breaking Remove FTabs.onChange. Use FTabs(control: .managed(...)) instead.
Breaking Rename FTabController(initialIndex: ...) to FTabController(index: ...).
FTappableFTappable to only update focused state when it has primary focus.FTextFieldAdd FFieldClearIconBuilder.
Add FObscureTextControl.
Add FTextFieldControl.
Add FTextField.control.
Add FTextField.clearIconBuilder.
Add FTextField.password.clearIconBuilder.
Add FTextFormField.control.
Breaking Remove FTextField.controller. Use FTextField(control: .managed(...)) instead.
Breaking Remove FTextField.onChange. Use FTextField(control: .managed(...)) instead.
Breaking Remove FTextField.initialText. Use FTextField(control: .managed(...)) instead.
Breaking Remove FTextFormField.controller. Use FTextFormField(control: .managed(...)) instead.
Breaking Remove FTextFormField.onChange. Use FTextFormField(control: .managed(...)) instead.
Breaking Remove FTextFormField.initialText. Use FTextFormField(control: .managed(...)) instead.
Breaking Remove FTextField.password(obscureTextController: ...). Use FTextField.password(obscureTextControl: ...) instead.
Breaking Remove FTextFormField.password(obscureTextController: ...). Use FTextFormField.password(obscureTextControl: ...) instead.
FTile & FTileGroupAdd FTileMixin.selectMenu(...).
Add FTileMixin.selectMenuFromMap(...).
Add FTileMixin.selectMenuBuilder(...).
Add FTileMixin.tile(...).
Add FTileMixin.raw(...).
Add FTileGroupMixin.selectGroup(...).
Add FTileGroupMixin.selectGroupBuilder(...).
Add FTileGroupMixin.group(...).
Add FTileGroupMixin.builder(...).
Add FTileGroupMixin.merge(...).
Breaking Remove FTileMixin.selectMenu(selectController: ...). Use FTileMixin.selectMenu(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenu(popoverController: ...). Use FTileMixin.selectMenu(popoverControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenu(onChange: ...). Use FTileMixin.selectMenu(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenu(onSelect: ...).
Breaking Remove FTileMixin.selectMenu(initialValue: ...). Use FTileMixin.selectMenu(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuFromMap(selectController: ...). Use FTileMixin.selectMenuFromMap(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuFromMap(popoverController: ...). Use FTileMixin.selectMenuFromMap(popoverControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuFromMap(onChange: ...). Use FTileMixin.selectMenuFromMap(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuFromMap(onSelect: ...).
Breaking Remove FTileMixin.selectMenuFromMap(initialValue: ...). Use FTileMixin.selectMenuFromMap(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuBuilder(selectController: ...). Use FTileMixin.selectMenuBuilder(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuBuilder(popoverController: ...). Use FTileMixin.selectMenuBuilder(popoverControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuBuilder(onChange: ...). Use FTileMixin.selectMenuBuilder(selectControl: .managed(...)) instead.
Breaking Remove FTileMixin.selectMenuBuilder(onSelect: ...).
Breaking Remove FTileMixin.selectMenuBuilder(initialValue: ...). Use FTileMixin.selectMenuBuilder(selectControl: .managed(...)) instead.
Breaking Remove FTileGroupMixin.selectGroup(selectController: ...). Use FTileGroupMixin.selectGroup(control: .managed(...)) instead.
Breaking Remove FTileGroupMixin.selectGroup(onChange: ...). Use FTileGroupMixin.selectGroup(control: .managed(...)) instead.
Breaking Remove FTileGroupMixin.selectGroup(onSelect: ...).
Breaking Remove FTileGroupMixin.selectGroupBuilder(selectController: ...). Use FTileGroupMixin.selectGroupBuilder(control: .managed(...)) instead.
Breaking Remove FTileGroupMixin.selectGroupBuilder(onChange: ...). Use FTileGroupMixin.selectGroupBuilder(control: .managed(...)) instead.
Breaking Remove FTileGroupMixin.selectGroupBuilder(onSelect: ...).
FTimeFieldAdd FTimeFieldControl.
Add FTimeField.picker(groupId: ...).
Breaking Rename FTimeField.shift to FTimeField.overflow.
Breaking Rename FTimeField.picker(inputAnchor: ...) to FTimeField.picker(fieldAnchor: ...).
Breaking Move FTimeFieldStyle.popoverConstraints to FTimeField.picker(constraints: ...).
Breaking Remove FTimeField.controller. Use FTimeField(control: .managed(...)) instead.
Breaking Remove FTimeField.onChange. Use FTimeField(control: .managed(...)) instead.
Breaking Remove FTimeField.initialTime. Use FTimeField(control: .managed(...)) instead.
Breaking Remove FTimeFieldController(vsync: ..., popoverMotion: ...). Use FTimeField(popoverControl: ...) instead.
Breaking Rename FTimeFieldController(initialTime: ...) to FTimeFieldController(time: ...).
FTimePickerAdd FTimePickerControl.
Breaking Remove FTimePicker.controller. Use FTimePicker(control: .managed(...)) instead.
Breaking Remove FTimePicker.onChange. Use FTimePicker(control: .managed(...)) instead.
Breaking Rename FTimePickerController(initial: ...) to FTimePickerController(time: ...).
Fix FTimePickerController.animateTo(...) not working with period-first locales (e.g. Korean).
FTooltipAdd FTooltipControl.
Add FTooltipController.shown.
Change FTooltip to not be focusable.
Change FTooltip's focus-triggered behavior to only show if its immediate focusable descendant has primary focus.
Breaking Rename FTooltip.shift to FTooltip.overflow.
Breaking Remove FTooltip.controller. Use FTooltip(control: .managed(...)) instead.
Fix FTooltip not interrupting ongoing animations when toggled again.
FToastFToasterMotion.collapseCurve's default value from easeOutCubic to easeOut.Add FMultiValueControl.
Add FTypeaheadController.fromValue(...).
Add FTypeheadTextStyles.
Breaking Remove FSidebar.width. This field was never intended for public usage - Use FSidebarStyle.constraints
instead.
Deprecate FValueNotifier. Please open an issue if there's a use-case that isn't covered.
Deprecate FValueNotifier.addValueListener(...). Please open an issue if there's a use-case that isn't covered.
Deprecate FValueNotifier.removeValueListener(...). Please open an issue if there's a use-case that isn't covered.
Deprecate FMultiValueNotifier.addUpdateListener(...). Please open an issue if there's a use-case that isn't covered.
Deprecate FMultiValueNotifier.removeUpdateListener(...). Please open an issue if there's a use-case that isn't covered.
Fix generated style docs being malformed.
Breaking Change FAutocompleteContentStyle.loadingIndicatorStyle to FAutocompleteContentStyle.progressStyle.
We've improved the styles' generated documentation. They should be much easier to navigate and understand.
FAccordionAdd FAccordionMotion.
Breaking Move animation related fields from FAccordionStyle to FAccordionMoton.
FAutocompleteAdd FAutocomplete.onReset.
Add FAutocompletController(popoverMotion: ...).
Breaking Change FAutocompleteContentStyle.loadingIndicatorStyle to FAutocompleteContentStyle.progressStyle.
FCheckboxAdd FCheckboxMotion.
Breaking Move animation related fields from FCheckboxStyle to FCheckboxMotion.
Fix FCheckbox flickering when rapidly hovering.
FDateFieldAdd FDateField.onReset.
Breaking Replace FDateFieldController(animationDuration: ...) with FDateFieldController(popoverMotion: ...).
FDialogAdd FDialogRouteStyle.
Add FDialogRouteMotion.
Add showFDialog(routeStyle: ...).
Add FDialogMotion.
Breaking Move barrier related fields from FDialogStyle to FDialogRouteStyle.
Breaking Move animation related fields from FDialogStyle to FDialogMotion.
Fix FDialog.body not allowing ScrollViews.
FFormFieldFFormField(onReset: ...).FFormFieldProperties(onReset: ...).FHeaderFHeader(...) not vertically centering title.FHeader(...) not respecting RTL locales.FHeader.nested(...) not vertically centering title.FHeader.nested(...) not respecting RTL locales.FItemGestureDetector being absorbed in focused FItems.FPopover & FPopoverMenuAdd FPopoverMotion.
Change default animations to be more subtle.
Breaking Replace FPopoverController(animationDuration: ...) with FPopoverController(motion: ...).
Breaking Change FPopoverMenu.hideRegion's default value from FHidePopoverRegion.anywhere to FHidePopoverRegion.excludeChild.
FProgressWe've reworked FProgress to be more customizable and easier to use.
Add FCircularProgress which represents indeterminate circular progress.
Add FCircularProgressStyle.
Add FInheritedCircularProgressStyle.
Add FDeterminateProgress which represents determinate linear progress.
Add FDeterminateProgressStyle.
Breaking Change FProgress to represent indeterminate linear progress.
Breaking Remove FProgressStyles.
FRadioAdd FRadioMotion.
Breaking Move animation related fields from FRadioStyle to FRadioMotion.
FSelect & FMultiSelectAdd FSelect.onReset.
Add FMultiSelect.onReset.
Breaking Rename FSelectSearchStyle.loadingIndicatorStyle to FSelectSearchStyle.progressStyle.
Breaking Replace FSelectController(animationDuration: ...) with FSelectController(popoverMotion: ...).
Breaking Replace FMultiSelectController(animationDuration: ...) with FMultiSelectController(popoverMotion: ...).
FSelectGroupFSelectGroup.onReset.FSelectMenuTileFSelectMenuTile.onReset.FSelectTileGroupFSelectTileGroup.onReset.FSheetAdd FModalSheetStyle.
Add FPersistentSheetStyle.
Add FSheetMotion.
Add FModalSheetMotion.
Add FPersistentSheetMotion.
Add FModalSheet(onClosing: ...).
Add FPersistentSheet(onClosing: ...).
Breaking Split FSheetStyle into FModalSheetStyle and FPersistentSheetStyle.
Breaking Move animation related fields from FSheetStyle to FSheetMotion.
FSidebarAdd FSidebarItemMotion.
Breaking Move animation related fields from FSiderbarItemStyle to FSiderbarItemMotion.
FSliderFSlider.onReset.FSliderStyle.tooltipMotion.FTabAdd FTabMotion.
Add FTabs.mouseCursor.
Breaking Replace FTabController(animationDuration: ...) with FTabController(motion: ...).
FTappableAdd FTappableMotion.
Breaking Move animation related fields from FTappableStyle to FTappableMotion.
FTextField & FTextFormFieldWe've added a password visibility toggle to password fields.
Add password visibility toggle to FTextField.password(...).
Add password visibility toggle to FTextFormField.password(...).
Add FTextFormField.onReset.
Change FTextField.email(label: ...) to be localized.
Change FTextField.password(label: ...) to be localized.
Change FTextFormField.email(label: ...) to be localized.
Change FTextFormField.password(label: ...) to be localized.
FThemeDataWe've added support for animated theme transitions. This should make transitions between themes gradual instead of abrupt.
Add FThemeData.lerp(...).
Change FThemeData.copyWith(...) to accept style builder functions.
FTimeFieldAdd FTimeField.onReset.
Breaking Replace FTimeFieldController(animationDuration: ...) with FTimeFieldController(popoverMotion: ...).
FToastAdd FToastMotion.
Add FToasterMotion.
Change animation to be more subtle.
Breaking Move animation related fields from FToastStyle to FToastMotion.
Breaking Move animation related fields from FToasterStyle to FToasterMotion.
Remove no-op FToast.onDismiss parameter that was accidentally included.
FTooltipAdd FTooltipMotion.
Breaking Replace FTooltipController(animationDuration: ...) with FTooltipController(motion: ...).
FWidgetStateMapFWidgetStateMap.lerpBoxDecoration(...).FWidgetStateMap.lerpColor(...).FWidgetStateMap.lerpIconThemeData(...).FWidgetStateMap.lerpTextStyle(...).FWidgetStateMap.lerpWhere(...).FToasterAdd FToaster.of(...).
Make FToasterState.show(context: ...) optional.
Add FImmutableTween.
Add FLabel.expands.
Fix FTextField.expands causing a render error.
Fix CLI generating incorrect icon mappings.
Breaking Change FAccordionItem.onStateChange from ValueChanged > to ValueChanged .
We've changed the default cursor for many widgets from MouseCursor.click to MouseCursor.defer. This is in line with
native desktop behavior and W3C User Interface guidelines.
FThemeDataHover colors now use lightness-based adjustments rather than alpha blending, providing better visual feedback across all
color variants, especially FColors.secondary.
We've also added support for theme extensions. This allows you to add custom application-specific properties to the theme without having to manage them around separately.
Add FThemeData.extension().
Add FThemeData.extensions.
Remove foreground parameter from FColors.hover(...).
FAccordionAdd FAccordionItem.onHoverChange
Add FAccordionItem.onStateChange
Breaking Make FAccordionController.controllers private.
Breaking Change FAccordionItem.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.
Breaking Remove FAccordionController.radio(...) - use FAccrdionController(max: 1) instead.
Breaking Remove FAccordionController.validate(...).
FAutocomplete (new)FAutocomplete.FAutocompleteController.FAutocompleteStyle.FAutocompleteSection.FAutocompleteItem.FBottomNavigationBarFBottomNavigationBarItem.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FButtonFButton.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FBreadcrumbAdd onTapHide to FBreadcrumb.collapsed(...).
Breaking Change FBreadcrumb.hideOnTapOutside to FBreadcrumb.hideRegion.
FDateFieldAdd onTapHide to FDateField.calendar(...).
Add FDateFieldCalendarProperties.onTapHide.
Breaking Change FDateField.hideOnTapOutside to FDateField.hideRegion.
Breaking Change FDateField.builder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldBuilder<FDateFieldStyle>.
Breaking Change FDateField.prefixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FDateFieldStyle>.
Breaking Change FDateField.suffixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FDateFieldStyle>.
FHeaderFHeaderAction.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FItemFItem.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FMultiSelect (new)FMultiSelect.FMultiSelectController.FMultiSelectStyle.FMultiSelectTag.FPopover & FPopoverMenuAdd FPopover.onTapHide.
Add FPopoverMenu.onTapHide.
Breaking Change FPopover.hideOnTapOutside to FPopover.hideRegion.
Breaking Change FPopoverMenu.hideOnTapOutside to FPopoverMenu.hideRegion.
Breaking Change FHidePopoverRegion to FPopoverHideRegion.
Breaking Change FHidePopoverRegion.excludeTarget to FHidePopoverRegion.excludeChild.
FSelectWe've done an overhaul of FSelect to make it more consistent and easier to use.
Add FSelect.contentEmptyBuilder.
Add FSelectItem.raw(...)
Change FSelect's vertical padding for default loading and empty indicators to be the same height.
Breaking Rename FSelect.divider to FSelect.contentDivider.
Breaking Replace FSelect.hideOnTapOutside with FSelect.hideRegion.
Breaking Change FSelect.builder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldBuilder<FTextFieldStyle>.
Breaking Change FSelect.prefixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> prefixBuilder.
Breaking Change FSelect.suffixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> suffixBuilder.
Breaking Change FSelectSearchFieldProperties.builder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldBuilder<FTextFieldStyle>.
Breaking Change FSelectSearchFieldProperties.prefixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> prefixBuilder.
Breaking Change FSelectSearchFieldProperties.suffixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> suffixBuilder.
Change FSelectSearchContentBuilder from List<FSelectItemMixin> Function(BuildContext context, FSelectSearchData<T> data);
to List<FSelectItemMixin> Function(BuildContext context, String query, Iterable<T> values).
Breaking Remove FSelectSearchFilter<T> typedef - use the literal function signature instead.
Breaking Remove FSelectSearchData<T> typedef.
Breaking Replace FSelect.emptyBuilder with FSelect.contentEmptyBuilder.
Breaking Replace FSelect.searchLoadingBuilder with FSelect.contentLoadingBuilder.
Breaking Replace FSelect.searchErrorBuilder with FSelect.contentErrorBuilder.
Breaking Replace FSelect.defaultEmptyBuilder with FSelect.defaultContentEmptyBuilder.
Breaking Replace FSelect.defaultSearchLoadingBuilder with FSelect.defaultContentLoadingBuilder.
Breaking Replace FSelect.fromMap(...) with FSelectSection.new(...).
Breaking Replace FSelect(...) with FSelectSection.rich(...).
Breaking Replace FSelect.searchFromMap(...) with FSelectSection.search(...).
Breaking Replace FSelect.search(...) with FSelectSection.searchBuilder(...).
Breaking Replace FSelectSection.new(...) with FSelectSection.rich(...)
Breaking Replace FSelectSection.fromMap(...) with FSelectSection.new(...).
Breaking Change FSelectItem(...)'s parameters to no longer accept string parameter.
Breaking Change FSelectItem.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.
Breaking Replace FSelectItemStyle with underlying FItemStyle.
Fix first focused item not unfocusing when other items are pressed on touch devices.
FSelectMenuTileAdd FSelectMenuTile.onTapHide.
Breaking Change FSelectMenuTile.hideOnTapOutside to FSelectMenuTile.hideRegion.
FSelectTileGroupFSelectTile.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FSidebarFSidebarGroup.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FSidebarItem.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FTappableFTappable.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FTextField & FTextFormFieldAdd FFieldBuilder.
Add `FFieldIconBuilder.
Add FTextField.selectAllOnFocus.
Add FTextFormField.selectAllOnFocus.
Breaking Change FTextField.builder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldBuilder<FTextFieldStyle>.
Breaking Change FTextField.prefixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> prefixBuilder.
Breaking Change FTextField.suffixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> suffixBuilder.
Breaking Change FTextFormField.builder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldBuilder<FTextFieldStyle>.
Breaking Change FTextFormField.prefixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> prefixBuilder.
Breaking Change FTextFormField.suffixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FTextFieldStyle> suffixBuilder.
FTileFTile.onStateChange from ValueChanged<Set<WidgetState>> to ValueChanged<FWidgetStatesDelta>.FTimeFieldAdd onTapHide to FTimeField.picker(...).
Breaking Change FTimeField.hideOnTapOutside to FTimeField.hideRegion.
Breaking Change FTimeField.builder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldBuilder<FDateFieldStyle>.
Breaking Change FTimeField.prefixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FDateFieldStyle>.
Breaking Change FTimeField.suffixBuilder from ValueWidgetBuilder<(FTextFieldStyle, Set<WidgetState>)> to
FFieldIconBuilder<FDateFieldStyle>.
Fix regression in Flutter 3.35.2 by reducing FTextFieldStyle.contentPadding from EdgeInsets.symmetric(horizontal: 14, vertical: 10)
to EdgeInsets.symmetric(horizontal: 10, vertical: 10).
Add FSelectMenuTile.onTapHide.
Add FTypeaheadController.
Add FWidgetStatesDelta.
Change FMultiValueNotifier to be non-abstract.
Breaking Change FMultiValueNotifier.radio({T? value}) to FMultiValueNotifier.radio([T? value]).
Breaking Change ValueWidgetBuilder<FToasterEntry>? suffixBuilder to Widget Function(BuildContext, FToasterEntry)? suffixBuilder
in showFToast(...).
Fix FProgress.circularIcon() using incorrect color.
Fix FScaffold not propagating IconTheme from FStyle.iconStyle.
Fix FSelectGroup throwing a duplicate error when rapidly hovering over several FCheckboxes.
Fix FTabs throwing an assertion error if FTabController is provided with a initialIndex > 0.
Fix FToastersometimes crashing due to an incorrect update of a late final variable.
FToastersometimes crashing due to an incorrect update of a late final variable.Breaking Change FItemData to store fields in separate data class instead of directly in an inherited widget.
FButtonFButton.onSecondaryPress.FButton.onSecondaryLongPress.FHeaderActionFHeaderAction.onSecondaryPress.FHeaderAction.onSecondaryLongPress.FHeaderAction.actions.FHeaderAction.shortcuts.FItemDataFItemData to store fields in separate data class instead of directly in an inherited widget.FItemData to FInheritedItemData.FPopoverBreaking Change FPopoverController.shown to FPopoverController.status.
Fix FPopover not respecting FPopover.traversalEdgeBehavior.
FSelectChange FSelect's default popover animation duration from 50ms to 100ms.
Change FSelect.anchor's default value from Alignment.topLeft to AlignmentDirectional.topStart.
Change FSelect.fieldAnchor's default value from Alignment.bottomLeft to AlignmentDirectional.bottomStart.
Fix FSelect flickering when selecting an item on desktop.
Fix FSelect not scrolling to selected item when opened if the item is really far down the list.
Fix FSelect layout shifting when scrolling through a long list of items.
FSelectMenuTileAdd FSelectMenuTile.fromMap(...).
Fix FSelectMenuTile throwing an error when wrapped in a FTileGroup.
FSidebarAdd FSidebar.focusNode.
Add FSidebar.traversalEdgeBehavior.
Change FSidebarItemStyle.focusedOutlineStyle.spacing from 3 to 0.
Fix FSidebar's focus traversal behavior.
FTappableFTappable.onSecondaryPress.FTappable.onSecondaryLongPress.FTileFTile.onSecondaryPress.FTile.onSecondaryLongPress.Add FToasterStyle.toastAlignment.
Change default hideOnTapOutside in FDateField.calendar(...) from FHidePopoverRegion.anywhere to FHidePopoverRegion.excludeTarget.
Change default hideOnTapOutside in FTimeField.picker(...) from FHidePopoverRegion.anywhere to FHidePopoverRegion.excludeTarget.
Breaking Change FPersistentSheetController.shown to FPersistentSheetController.status.
Breaking Change FTooltipController.shown to FTooltipController.status.
Fix FPopoverMenu throwing an error when wrapped in a FTileGroup.
Fix FTextField applying different padding on mobile & desktop.
Fix FSelectTile mixing in FItemMixin instead of FTileMixin.
FSelectTile mixing in FItemMixin instead of FTileMixin.FSelectMenuTile mixing in FItemMixin instead of FTileMixin.In most cases, this is not a breaking change. Styles have been updated to implement the call function. This means that you can still pass in a style o…
This update focuses on polishing & improving the usability of existing widgets.
We've updated the animations in Forui to feel more nature and be origin aware. This should make the animations feel more polished.
We've updated most overlay widgets to support background blur & glassmorphic styles. This is disabled by default. It can
be enabled by setting a barrierFilter & backgroundFilter in the widget's style.
We've updated styles to be easier to configure and use without the CLI. All widgets now accept a style builder function rather than a style object. Similarly, all nested styles inside styles have been replaced with style builder functions. This makes it easier to customize styles based on the existing styles.
Previously:
FFCheckbox(
style: context.theme.checkBoxStyle.copyWith(
tappableStyle: context.theme.checkBoxStyle.copyWith(...),
),
);
Now:
FFCheckbox(
style: (style) => style.copyWith(
tappableStyle: (style) => style.copyWith(...),
),
);
In most cases, this is not a breaking change. Styles have been updated to implement the call function. This means
that you can still pass in a style object as before.
// Long-form
FFCheckbox(
style: (style) => FCheckBoxStyle(...),
);
// Short-form
FFCheckbox(
style: FCheckBoxStyle(...),
);
FThemeDataFColors.systemOverlayStyle.FAccordionAdd FAccordionItemStyle.expandDuration.
Add FAccordionItemStyle.expandCurve.
Add FAccordionItemStyle.collapseDuration.
Add FAccordionItemStyle.collapseCurve.
Refine FAccordion's collapsible animation.
Breaking Change FAccordionStyle.iconStyle's default icon color from primary to mutedForeground.
Breaking Remove FAccordionItemStyle.animationDuration - use FAccordionItemStyle.expandDuration instead.
FAlertFAlertStyle.primary's signature - pass FAlertStyle.primary() instead of FAlert.primary to FAlert.FAlertStyle.destructive's signature - pass FAlertStyle.destructive() instead of FAlert.destructive to FAlert.FBadgeFBadgeStyle.primary's signature - pass FBadgeStyle.primary() instead of FBadgeStyle.primary to FBadgeStyle.FBadgeStyle.secondary's signature - pass FBadgeStyle.secondary() instead of FBadgeStyle.secondary to FBadgeStyle.FBadgeStyle.destructive's signature - pass FBadgeStyle.destructive() instead of FBadgeStyle.destructive to FBadgeStyle.FBadgeStyle.outline's signature - pass FBadgeStyle.outline() instead of FBadgeStyle.outline to FBadgeStyle.FBottomNavigationBarFBottomNavigationBarStyle.backgroundFilter.FBreadcrumbWe've added support for an alternative popover menu which uses FItem and more closely resembles Shadcn/ui's popover
menu suited for desktop.
Add FBreadcrumbItem.collapsedTiles(...).
Breaking Change FBreadcrumbItem.collapsed to use FItem instead of FTile - use FBreadcrumb.collapsedTiles(...)
instead.
FButtonAdd FButton.actions.
Add FButton.shortcuts.
Add mainAxisAlignment to FButton(...).
Add crossAxisAlignment to FButton(...).
Add textBaseline to FButton(...).
Add FButtonContentStyle.spacing.
Breaking Change instrinicWidth in FButton(...) to mainAxisSize.
Breaking Change FButtonStyle.primary's signature - pass FButtonStyle.primary() instead of FButtonStyle.primary to FButtonStyle.
Breaking Change FButtonStyle.secondary's signature - pass FButtonStyle.secondary() instead of FButtonStyle.secondary to FButtonStyle.
Breaking Change FButtonStyle.destructive's signature - pass FButtonStyle.destructive() instead of FButtonStyle.destructive to FButtonStyle.
Breaking Change FButtonStyle.outline's signature - pass FButtonStyle.outline() instead of FButtonStyle.outline to FButtonStyle.
Breaking Change FButtonStyle.ghost's signature - pass FButtonStyle.ghost() instead of FButtonStyle.ghost to FButtonStyle.
FDialogshowFDialog.FDialog.animation.FDialogRoute.FDialogStyle.barrierFilter.FDialogStyle.backgroundFilter.FDialogStyle.entranceExitDuration.FDialogStyle.entranceCurve.FDialogStyle.exitCurve.FDialogStyle.fadeTween.FDialogStyle.scaleTween.FHeaderFHeaderStyle.backgroundFilter.FHeaderStyle.decoration.FItem (new)An FItem is typically used to group related information together. It is a more generic version of FTile that is used
to build more complex widgets.
FItem.FItemData.FItemDivider.FItemGroup.FItemStyle.FItemContentStyle.FPopoverAdd FPopover.barrierSemanticsLabel.
Add FPopover.barrierSemanticsDismissible.
Add FPopover.builder.
Add FPopoverStyle.barrierFilter.
Add FPopoverStyle.backgroundFilter.
Change FPopover's animation to be origin aware.
Change FPopover(...)'s controller to be optional.
Breaking Change FPopover.hideOnTapOutside default value from FHidePopoverRegion.anywhere to
FHidePopoverRegion.excludeTarget.
Breaking Change FPopover.popoverBuilder's signature from ValueWidgetBuilder<FPopoverStyle> to
Widget Function(BuildContext, FPopoverController).
Breaking Remove FPopover.automatic - This was a bad abstraction in hindsight, use FPopover.new instead.
FPopoverMenuWe've added support for an alternative popover menu which uses FItem and more closely resembles Shadcn/ui's popover
menu suited for desktop.
Add FPopoverMenu.tiles(...)
Add FPopoverMenu.barrierSemanticsLabel.
Add FPopoverMenu.barrierSemanticsDismissible.
Add FPopoverMenu.builder.
Add FPopoverMenu.menuBuilder.
Change FPopoverMenu's animation to be origin aware.
Change FPopoverMenu(...)'s controller to be optional.
Breaking Remove FPopoverMenu.automatic - This was a bad abstraction in hindsight, use FPopoverMenu.new instead.
Breaking Change FPopoverMenu(...) to use FItems instead of FTiles - use FPopoverMenu.tiles(...) instead.
FPortalAdd FPortal.barrier.
Add FPortal.builder(...).
Change FPortal.controller to be optional.
Breaking Change FPortal.portalBuilder's signature from WidgetBuilder to
Widget Function(BuildContext, FPortalController).
FSelectWe've updated FSelect to support dividers & FSelectItem to support prefixes & subtitles.
Add FSelect.divider.
Add FSelectSection.divider.
Add FSelectItem.prefix.
Add FSelectItem.subtitle.
Add FSelectItemStyle.prefixIconStyle.
Add FSelectItemStyle.prefixIconSpacing.
Add FSelectItemStyle.titleSpacing
Add FSelectItemStyle.subtitleStyle.
Breaking Rename FSelectItem.child to FSelectItem.title.
Breaking Rename FSelectItemStyle.textStyle to FSelectItem.titleTextStyle.
Breaking Rename FSelectItemStyle.iconStyle to FSelectItem.suffixIconStyle.
Fix FSelect.search(...) always focusing on 1st item even when there is a selected item.
Fix FSelect.search(...) expanding items unnecessarily.
FSelectMenuTileAdd FSelectMenuTile.actions.
Add FSelectMenuTile.barrierSemanticsLabel.
Add FSelectMenuTile.barrierSemanticsDismissible.
Add FSelectMenuTile.detailsBuilder.
Add FSelectMenuTile.shortcuts.
Change FSelectMenuTile.selectController to be optional.
FSheetFSSheet's transition animation.FSheetStyle.barrierColor to FSheetStyle.barrierFilter.FSheetStyle.backgroundColor.FSidebarAdd FSidebarStyle.backgroundFilter.
Add FSidebarStyle.decoration.
Add FSidebarItemStyle.expandDuration.
Add FSidebarItemStyle.expandCurve.
Add FSidebarItemStyle.collapseDuration.
Add FSidebarItemStyle.collapseCurve.
Refine FSidebar's collapsible animation.
Breaking Change FSidebar to not bounce.
Breaking Change FSidebar.child to be non-nullable.
Breaking Change FSidebarStyle.width to FSidebarStyle.constraints.
Breaking Remove FSidebarStyle.bordeColor - use FSidebarStyle.decoration instead.
Breaking Remove FSidebarStyle.bordeWidth - use FSidebarStyle.decoration instead.
Breaking Remove FSidebarItemStyle.collapsibleAnimationDuration - use FSidebarItemStyle.expandDuration instead.
Fix FSidebarItem's style not updating when passed in style changes.
FTappableAdd FTappable.actions.
Add FTappable.shortcuts.
Add FTappableStyle.bounceDuration.
Add FTappableStyle.bounceDownCurve.
Add FTappableStyle.bounceUpCurve.
Breaking Rename FTappableStyle.animationTween to FTappableStyle.bounceTween.
Breaking Remove FTappableAnimations - use FTappableStyle.defaultBounceTween and FTappableStyle.noBounceTween
instead.
FTileWe have refactored FTile's implementation to be simpler & its styling to be easier to understand & use. It now uses
FItem internally.
Add FTile.actions.
Add FTile.shortcuts.
Add FTile.raw(...).
Add FTileGroupStyle.border.
Add FTileGroupStyle.divierColor.
Add FTileGroupStyle.dividerWidth.
Breaking Change FTileGroup to render the border even if it contains no groups/tiles - while this isn't desirable
this allows us to draw the border in a single pass rather than having each tile draw its part of the border and stitching
the results.
Breaking Change FTile to default to FThemeData.tileStyle instead of FThemeData.tileGroupStyle.tileStyle when
FTile is not inside a FTileGroup.
Breaking Remove FTileGroupStyle.borderColor - use FTileGroupStyle.border instead.
Breaking Remove FTileGroupStyle.borderWidth - use FTileGroupStyle.border instead.
Breaking Change prefixIcon to prefix in FTile(...)`.
Breaking Change suffixIcon to suffix in FTile(...)`.
Breaking Change FTile to ignore WidgetStates when neither onPress nor orLongPress is given.
Change FTile's focused outline to be a rounded rectangle even if the tile is inside a FTileGroup.
Change FTile to no longer wrap its content inside a FTileData if it is not part of a FTileGroup.
Breaking Remove FTileDivider - use FItemDivider instead.
Breaking Remove FTileData - use FItemData instead.
Breaking Remove FTileGroupData - use FItemDatas instead.
Breaking Change FTileStyle to extend FItemStyle.
Breaking Remove FTileStateStyle.
Breaking Remove FTileStateStyle.backgroundColor - use FTileStyle.decoration instead.
Breaking Remove FTileStateStyle.borderColor - use FTileStyle.decoration instead.
Breaking Remove FTileStateStyle.borderRadius - use FTileStyle.decoration instead.
Fix FTileGroup.merge(...) ignoring physics property.
Fix FTile's focused outline being drawn even when explicitly disabled.
FToastWe've made toasts dismissable by swiping.
Add swipeToDismiss to showFToast(...).
Add swipeToDismiss to showRawFToast(...).
Add FToastStyle.backgroundFilter.
Add FToasterStyle.swipeCompletionDuration.
Add FToasterStyle.swipeCompletionCurve.
Fix FToaster auto-dismissing when hovering over non-first toast when expanded.
Fix FToaster expanded state persisting after all toasts has been dismissed on touch devices.
Fix showFToast & showRawFToast not using custom style passed to FToaster.
FTooltipAdd FTooltip.builder.
Add FTooltipStyle.backgroundFilter.
Breaking Replace FTooltipStyle.margin with FTooltip.spacing.
Breaking Change FTooltip.tipBuilder's signature from ValueWidgetBuilder<FTooltipStyle> to
Widget Function(BuildContext, FTooltipController).
Change FTooltip's animation to be origin aware.
FScaffoldFScaffold.toasterSwipeToDismiss.FScaffold.systemOverlayStyle.FSelectMenuTileFSelectMenuTile.prefixIcon to FSelectMenuTile.suffix.FSelectMenuTile.suffixIcon to FSelectMenuTile.suffix.FSelectTileprefixIcon to prefix in FSelectTile.suffix(...)`.suffixIcon to suffix in FSelectTile(...)`.Add FAnimatedModalBarrier.
Add FModalBarrier.
Add FPaginationStyle.focusedOutlineStyle.
Add FLocalizations.popoverSemanticsLabel.
Add FSelectTile.actions.
Add FSelectTile.shortcuts.
Breaking Remove defaultFontFamily from FTypography.copyWith(...).
Breaking Change FSelectTileGroup.divider from FTileDivider to FItemDivider.
Breaking Change FSelectMenuTile.autoHide default value from false to true.
Breaking Change FSelectMenuTile.divider from FTileDivider to FItemDivider.
Breaking Remove FTransformable.
Fix FTappable persisting pressed effect even after pointer is moved outside the widget.
Fix FTextFormField not passing correct value to validator when no controller is provided.
Breaking Change format in FSelect.new(...) to be required.
Bumps minimum Flutter SDK version to 3.32.0.
Add icon-mapping snippet.
Breaking Improve how style aliases are generated - Certain style aliases may be removed or renamed.
Fix style suggestions always displaying actual style name instead of alias.
FCollapsible (new)A widget that collapses and expands its child.
FCollapsible.FDateFieldEnhance FDateField.calendar's focus management.
Fix FDateField not closing calendar popover when enter is pressed.
FScaffoldFScaffold.sidebar.FScaffold.toasterSwipeToDismiss.FScaffoldStyle.sidebarBackgroundColor.FSelectAdd FSelect.searchFromMap(...).
Add FSelectItem.raw(...).
Add FSelectSection.fromMap(...).
Breaking Change format in FSelect.new(...) to be required.
Breaking Change format in FSelect.search(...) to be required.
Breaking Remove FSelect.defaultFormat.
Breaking Change FSelectItem(...) to require a String text instead of Widget child.
FSidebar (new)A sidebar widget that usually resides on the side of the screen for navigation.
FSidebar.FSidebarGroup.FSidebarItem.FTextField & FTextFormFieldFTextField.onTapOutside.FTextFormField.onTapOutside.FToast & FToaster (new)An optional toast.
showFToast(...).showRawFToast(...).FToast.FToastStyle.FToaster.FToasterEntry.FToasterExpandBehavior.FToasterStyle.Add toggleable parameter to FCalendarController.date(...).
Add toggleable parameter to FLineCalendar(...).
Add FPopover.shortcuts.
Add FTabs.onPress.
Breaking Change FLineCalendar to be un-toggleable by default.
Breaking Change FThemeData.headerStyle to FThemeData.headerStyles.
Enhance FSelect's focus management.
Enhance FTimeField.picker's focus management.
Add optional named parameters with their default values to CLI generated styles.
FTileStyle.pressable not changing background color on press & hold.We made several breaking changes to styles and widgets that rely on state styles to improve consistency and usability (too many to list sanely). Gener…
We added a CLI to generate styles for Forui widgets. See forui.dev/docs/cli for more information.
We made several breaking changes to styles and widgets that rely on state styles to improve consistency and usability
(too many to list sanely). Generally, all styles have been updated to use WidgetStates, becoming more customizable and
concise.
FThemeData.colorScheme to FThemeData.colors.F<Style>.inherit(colorScheme: ...) to F<Style>.inherit(colors: ...).Both semanticsLabel and semanticLabel were used interchangeably throughout the library. All semanticLabels
have been renamed to semanticsLabel for consistency.
semanticLabel to semanticsLabel in FAvatar.new.semanticLabel to semanticsLabel in FBreadcrumb.collapsed.FCheckbox.semanticLabel to FCheckbox.semanticsLabel.FDialog.semanticLabel to FDialog.semanticsLabel.FHeaderAction.semanticLabel to FHeaderAction.semanticsLabel.FPopover.semanticLabel to FPopover.semanticsLabel.FPopoverMenu.semanticLabel to FPopoverMenu.semanticsLabel.FRadio.semanticLabel to FRadio.semanticsLabel.FSelectGroupItem.semanticLabel to FSelectGroupItem.semanticsLabel.FSelectMenuTile.semanticLabel to FSelectMenuTile.semanticsLabel.FSelectTile.semanticLabel to FSelectTile.semanticsLabel.FSelectTileGroup.semanticLabel to FSelectTileGroup.semanticsLabel.FSwitch.semanticLabel to FSwitch.semanticsLabel.FTappable.semanticLabel to FTappable.semanticsLabel.FTile.semanticLabel to FTile.semanticsLabel.FTileGroup.semanticLabel to FTileGroup.semanticsLabel.FAccordionAdd FAccordionItemMixin.
Breaking Change FAccordion.items to FAccordion.children.
Change FAccordion.children from List<FAccordionItem> to List<FAccordionIteMixin.
FBottomNavigationBarThe tappable logic has been moved from FBottomNavigationBar to FBottomNavigationBarItem to improve
FBottomNavigationBarItem's usability. Unfortunately, this means that custom navigation items have to implement
FTappable on their own moving forward.
Add FBottomNavigationBarItem.autofocus.
Add FBottomNavigationBarItem.focusNode.
Add FBottomNavigationBarItem.onFocusChange.
Add FBottomNavigationBarItem.onHoverChange.
Add FBottomNavigationBarItem.onStateChange.
Add FBottomNavigationItemStyle.spacing.
Breaking Move FBottomNavigationBarStyle.tappableStyle to FBottomNavigationBarItemStyle.tappableStyle.
Breaking Move FBottomNavigationBarStyle.focusedOutlineStyle to FBottomNavigationBarItemStyle.focusedOutlineStyle.
FButtonAdd FButton.onChange.
Add FButton.onHoverChange.
Add FButton.selected.
Add intrinsicWidth to FButton(...).
Breaking Change FButton(label: ...) to FBadge(child: ...).
FBreadcrumbAdd traversalEdgeBehavior to FBreadcrumbItem.collapsed.
Add autofocus to FBreadcrumbItem(...).
Add focusNode to FBreadcrumbItem(...).
Add onFocusChange to FBreadcrumbItem(...).
Add onHoverChange to FBreadcrumbItem(...).
Add onStateChange to FBreadcrumbItem(...).
Add spacing to FBreadcrumbItem.collapsed(...).
Add offset to FBreadcrumbItem.collapsed(...).
Add onHoverChange to FBreadcrumbItem.collapsed(...).
Add onStateChange to FBreadcrumbItem.collapsed(...).
Add FBreadcrumbStyle.focusedOutlineStyle.
Breaking Change focusNode from FocusNode to FocusScopeNode in FBreadcrumbItem.collapsed.
Breaking Remove directionPadding from FBreadcrumbItem.collapsed(...).
FDateFieldAdd FDateField.builder.
Add FDateField.initialDate.
Add FDateField.onChange.
Add spacing to FDateField.calendar(...).
Add offset to FDateField.calendar(...).
Add spacing to FDateField(...).
Add offset to FDateField(...).
Breaking Remove directionalPadding from FDateField.calendar(...).
Breaking Remove directionalPadding from FDateField(...).
FDialogBreaking Change FDialog to not automatically wrap actions in InstrinicWidth.
Breaking Change FDialog to not automatically wrap body in IntrinsicWidth.
Breaking Move FDialog.insetAnimationDuration to FDialogStyle.insetAnimationDuration.
Breaking Move FDialog.insetAnimationCurve to FDialogStyle.insetAnimationCurve.
Breaking Combine FDialogStyle.minWidth and FDialogStyle.maxWidth into FDialog.constraints..
Breaking Combine FDialogStyle.minWidth and FDialogStyle.maxWidth to FDialog.constraints..
FDialog not handling infinitely sized body correctly.FHeaderAdd FHeaderAction.onHoverChange.
Add FHeaderAction.onStateChange.
Add FHeaderAction.selected.
Add titleAlignment to FHeader.nested(...). Thanks @a-man-called-q!
Change FHeader(title: ...) to be optional.
Change FHeader.nested(title: ...) to be optional.
Breaking Change FHeader(actions: ...) to FHeader(suffixes: ...).
Breaking Change FHeader(prefixActions: ...) to FHeader(prefixes: ...).
Breaking Change FHeader(suffixActions: ...) to FHeader(suffixes: ...).
Fix FHeader spacing appearing in incorrect order.
FIcon (removed)FIcon has been removed in favor of Flutter's Icon class. FIcon was designed with only monochrome icons in mind
and is not able to support multicolored icons. This coincides with replacement of FAssets with FIcons and svg icons
with font icons. In addition, all iconColor and iconSize style properties have been replaced with IconThemeData.
FIcon - use Flutter's Icon.FIconStyle - use Flutter's IconThemeData instead.FAssets with FIcons.FAccordionStyle iconColor and iconSize with iconStyle.FBottomNavigationBarItemStyle activeIconColor, inactiveIconColor and iconSize with
selectedIconStyle and unselectedIconStyle.FBottomNavigationBarItemStyle activeTextStyle and inactiveTextStyle with selectedTextStyle
and unselectedTextStyle.FButtonIconContentStyle enabledColor, disabledColor and iconSize with enabledStyle and
disabledStyle.FButtonContentStyle enabledIconColor, disabledIconColor and iconSize with enabledIconStyle
and disabledIconStyle.FButtonIconContentStyle enabledColor, disabledColor and iconSize with enabledStyle and
disabledStyle.FCalendarHeaderStyle enabledIconColor and disabledIconColor - configure
buttonStyle.iconContentStyle instead.FDateFieldStyle.iconStyle from FIconStyle to IconThemeData.FHeaderActionStyle enabledColor, disabledColor and size with enabledStyle and
disabledStyle.FPaginationStyle.iconStyle from FIconStyle to IconThemeData.FTileContentStateStyle.prefixIconStyle from FIconStyle to IconThemeData.FTileContentStateStyle.suffixIconStyle from FIconStyle to IconThemeData.FTimeFieldStyle.iconStyle from FIconStyle to IconThemeData.FAlertCustomStyle iconColor and iconSize with iconStyle.FBreadcrumbStyle.iconStyle from FIconStyle to IconThemeData.FCheckboxStateStyle iconColor with iconStyle.FLineCalendarFLineCalendar.onChange.FLineCalendar.initialSelection.FLineCalendar.physics.FLineCalendar.keyboardDismissBehavior.FLineCalendar.controller to be optional.FLineCalendar.initialDateAlignment to FLineCalendar.initialScrollAlignment.FLineCalendar.initial to FLineCalendar.initialScroll.FPaginationAdd FPagination.initialPage.
Add FPagination.pages.
Change FPagination.controller to be optional.
Change FPagination.onChange from VoidCallback? to ValueChanged<int>?
Breaking Change FPaginationController to require pages parameter.
FPopover & FPopoverMenu.The traversal-edge behavior of FPopover and Forui widgets that depend on it have been fixed.
Add FPopover.traversalEdgeBehavior.
Add traversalEdgeBehavior to FPopoverMenu.
Add FPopover.constraints.
Add FPopover.spacing.
Add FPopover.offset.
Add FPopover.groupId.
Add FPopoverMenu.spacing.
Add FPopoverMenu.offset.
Add FPopoverMenu.groupId.
Breaking Change FPopover.focusNode from FocusNode to FocusScopeNode.
Breaking Change FPopoverMenu.focusNode from FocusNode to FocusScopeNode.
Breaking Remove FPopover.directionPadding.
Breaking Remove FPopoverMenu.directionPadding.
Fix FPopover unconditionally calling FPopoverController.hide() when tapping outside a FPopover.
FPortalFPortal has been re-implemented to support size alignment, directional spacing & fix a series of longstanding issues.
FPortal.viewInsets.FPortal.spacing.FPortalConstraints.FPortalSpacing.FPortal not positioning portals correctly when wrapped in a RepaintBoundary/Padding.FPortal not updating portals when child's offset/size changes.FPortal displaying portal when child is not rendered.FProgressFProgress has been updated to support indeterminate progress and fix some longstanding issues.
FProgress.circularIcon.FProgressStyle to FLinearProgressStyle.FButtonSpinner - use FProgress.circularIcon(...) instead.FSelect (new)A select displays a list of options for the user to pick from. It is searchable and supports both async & sync loading of items.
FSelect.FSelectController.FSelectGroup, FSelectGroupController & controller callbacksFSelectGroupController has been replaced with FMultiValueNotifier to allow usage across other non-select group
widgets. This applies to all Forui widgets that use FSelectGroupController.
A new onChange and onSelect callback has been added to most Forui widgets.
Add FMultiValueNotifier.
Add FSelectTileGroupController typedef.
Add FSelectMenuTileController typedef.
Add FSelectGroup.onChange.
Add FSelectGroup.onSelect.
Add FSelectTileGroup.onChange.
Add FSelectTileGroup.onSelect.
Add FSelectMenuTile.onChange.
Add FSelectMenuTile.onSelect.
Breaking Change FSelectGroup(items: ...) to FBadge(children: ...).
Breaking Replace FSelectGroupItem with FCheckbox.grouped(...) and FRadio.grouped(...).
Breaking Replace FSelectGroupController with a typedef of FMultiValueNotifier.
Breaking Remove FMultiSelectGroupController - use FSelectGroupController(...) instead.
Breaking Remove FRadioSelectGroupController - use FSelectGroupController.radio(...) instead.
Breaking Rename FSelectTileGroup.groupController to FSelectTileGroup.selectController.
Breaking Rename FSelectMenuTile.groupController to FSelectMenuTile.selectController.
Breaking Rename FSelectMenuTile.menuTileBuilder to FSelectMenuTile.menuBuilder.
Fix FSelectGroup not setting its FormField's initial value.
FSelectMenuTileAdd FSelectMenuTile.traversalEdgeBehavior.
Add FSelectMenuTile.spacing.
Add FSelectMenuTile.offset.
Breaking Change focusNode from FocusNode to FocusScopeNode in FSelectMenuTile.
Breaking Remove FSelectMenuTile.directionalPadding.
FSelectTile & FSelectTileGroupAdd FSelectTile.onHoverChange.
Add FSelectTile.onStatesChange.
Fix FSelectTileGroup not setting its FormField's initial value.
FSliderAdd FSlider.initialSelection.
Add FSlider.onChange.
Change FSlider.controller to be optional.
Fix FSlider not setting its FormField's initial value.
FTabsAdd FTabs.physics.
Breaking Change FTabs(tabs: ...) to FTabs(children: ...).
Breaking Rename FTabs.onPress to FTabs.onChange to better reflect its purpose.
Breaking Change FTabEntry(content: ...) to FTabEntry(child: ...).
FTappableFTappable has been updated to support animations by default. This applies to all Forui widgets that use FTappable.
The hovered state has also been split into hovered and pressed states.
Add FTappableStyle.
Add FAccordionStyle.tappableStyle.
Add FBottomNavigationBarStyle.tappableStyle.
Add FBreadcrumbStyle.tappableStyle.
Add FButtonStyle.tappableStyle.
Add FCalendarDayPickerStyle.tappableStyle.
Add FCalendarEntryStyle.tappableStyle.
Add FCalendarHeaderStyle.tappableStyle.
Add FHeaderActionStyle.tappableStyle.
Add FLineCalendarStyle.tappableStyle.
Add FPaginationStyle.tappableStyle.
Add FTileStyle.tappableStyle.
Add FTappable.onStateChange.
Add FTappable.onHoverChange.
Add FTappableStyle.cursor.
Breaking Replace FTappable.semanticsSelected with FTappable.selected.
Breaking Rename FTappable to FTappable.static.
Breaking Rename FTappable.animated to FTappable.
Breaking Split FTappableData.hovered into FTappableData.hovered and FTappableData.pressed.
Fix FTappable's animation sometimes being invoked after it is unmounted.
FTextField & FTextFormField (new)We've split FTextField into FTextField and FTextFormField. This change was necessary to allow FTextField to be
used in other widgets and allowing those widgets to properly implement FormField.
Add FTextField.groupId.
Add FTextField.obscuringCharacter. Thanks @MrHeer!
Add FTextField.filled and FTextField.fillColor. Thanks @MrHeer!
Add FTextFormField.
Breaking Change FTextField to not support form-related operations. Use FTextFormField instead.
Fix FTextField not setting its FormField's initial value.
Fix FTextField(...) not setting the max lines to 1 default.
FTileFTile.onHoverChange.FTile.onStateChange.FTile.selected.FTimeFieldAdd FTimeField.builder.
Add FTimeField.initialTime.
Add FTimeField.onChange.
Add spacing to FTimeField.picker(...).
Add offset to FTimeField.picker(...).
Breaking Remove directionalPadding from FTimeField.picker(...).
Breaking Rename FAlertStyle to FBaseAlertStyle.
Breaking Rename FAlertCustomStyle to FAlertStyle.
Breaking Move constants in FBaseAlertStyle to FAlertStyle.
Breaking Change FBadge(label: ...) to FBadge(child: ...).
Add FCardContentStyle.imageSpacing.
Add FCardContentStyle.subtitleSpacing.
Add FLerpBorderRadius.
Add FPicker.onChange.
Add FResizable.onChange.
Fix FResizable not guarding against precision errors in assertions.
Breaking Change FScaffold(content: ...) to FScaffold(child: ...).
Add FTimePicker.onChange.
Fix bad build caused by generated files not being published.
Fix bad build caused by generated files not being published.
Breaking Change FThemeData(...) to automatically configure styles not passed in.
FTextField.counterBuilder.FTransformable.FTransformables.FTextField.clearable.FTextField.stylusHandwritingEnabled.FPickerWheelMixin.FTimeField.FTimeFieldController.FTimeFieldProperties.FThemeData.toApproximateMaterialTheme().FTimePicker.FTimePickerStyle.FPickerStyle.selectionHeightAdjustment.FDateField.clearable.FTileGroup.physics.FSelectTileGroup.physics.FSelectMenuTile.physics.FPagination.FDateField's default prefix icon and content.Alignment to AlignmentGeometry.BorderRadius to BorderRadiusGeometry.EdgeInsets to EdgeInsetsGeometry.FDatePicker to FDateField.FDatePickerController to FDateFieldController.FDatePickerController.calendar to FDateFieldController.popover.FDatePickerCalendarProperties to FDateFieldCalendarProperties.FLocalizations.datePickerHint to FLocalizations.dateFieldHint.FLocalizations.datePickerInvalidDateError to FLocalizations.dateFieldInvalidDateError.FThemeData(...) to automatically configure styles not passed in.FThemeData.inherit. Use FThemeData(...) instead.stylusHandwritingEnabled instead.FDialogContentStyle.actionPadding to FDialogContentStyle.actionSpacing.FPickerStyle.textStyle size from lg to base.FTimePicker to use FTimePickerStyle instead of FPickerStyle.FLocalizations.sheetLabel to FLocalizations.sheetSemanticsLabel.FBadgeStyle to FBaseBadgeStyle.FBadgeCustomStyle to FBadgeStyle.FBaseBadgeStyle to FBadgeStyle.FButtonStyle to FBaseButtonStyle.FButtonCustomStyle to FButtonStyle.FBaseButtonStyle to FButtonStyle.FDateField.input to show default icon.FTab not updating when using controller to switch tabs.FPicker incorrectly detecting number of wheels when controller is not given and placeholder is used.FDateField not handling bg, en, sr, sr_Latn and zu locales properly.FDateField not updating when locale changes.FHeader not respecting FHeaderStyle.actionSpacing.Bump Sugar from 3.1.0 to 4.0.0.
FAccordion disposing passed in controllers.FPicker incorrectly handling widget updates.FPopover incorrectly handling widget updates.Fix documentation not publishing.
Fix documentation not publishing.
Breaking Change FPopover.hideOnTapOutside's type from bool to FHidePopoverRegion. The default behavior for hiding behavior for FPopover() has changed…
FDatePicker.FFormProperties.FPagination.FPicker.FPopoverTagRegion.FBreadcrumb.FTextField.builder.FTextField.onTap.FTextField.onTapAlwaysCalled.FSelectGroupController.onUpdate.animationTween to FTappable.animated(...).FValueNotifier.addValueListener(...).FValueNotifier.removeValueListener(...).FPopover.hideOnTapOutside's type from bool to FHidePopoverRegion. The default behavior for hiding behavior for FPopover() has changed from excluding the target to not.FPopoverStyle.shadow to FStyle.shadow.FPopoverMenu.tappable(...) to FPopoverMenu.automatic(...).FPopover.controller(...) to FPopover.popoverController(...).FPopover.tappable(...) to FPopover.automatic(...).FPopover.followerAnchor to FPopover.popoverAnchor.FPopover.targetAnchor to FPopover.childAnchor.FPortal.followerAnchor to FPortal.portalAnchor.FPortal.targetAnchor to FPortal.childAnchor.FPortal.followerBuilder to FPortal.portalBuilder.FPortalFollowerShift to FPortalShift.onChange parameter from FSelectTile. This was accidentally include from early prototyping.FSelectGroupController.select(...) to FSelectGroupController.update(...)FSelectGroupController to be a ValueNotifier.FTileGroup.prefix from Widget to ValueWidgetBuilder<FTextFieldStateStyle>.FTileGroup.suffix from Widget to ValueWidgetBuilder<FTextFieldStateStyle>.FTileGroup.controller to FTileGroup.scrollController.FCalendar rebuilding whenever the given initialType and/or initialMonth changes.FCalendar's day picker not updating when a new start and/or end date is given.FHeader.nested(...) not rendering the title when no prefix and suffix actions are given.FPopover not handling focus changes in popover properly.FTabs's scrollable alignment not being correct.FTappable remaining in a hovered or touched state when its onPress/onLongPress callbacks were nulled after being non-null.FTextField ignoring enableInteractiveSelection parameter.FTextField ignoring FTextFieldStyle.cursorColor.Breaking Change Layout to FLayout.
Bump minimum Flutter version to 3.27.0.
Add showFSheet(...).
Add showFPersistentSheet(...).
Add FModalSheetRoute.
Add FSheets.
Add FSheets internally to FScaffold.
Add truncateAndStripTimezone to FCalendarController.date(...).
Add truncateAndStripTimezone to FCalendarController.dates(...).
Add truncateAndStripTimezone to FCalendarController.range(...).
Add FCalendar.dayBuilder.
Add FLineCalendar.
Add FTileGroup.builder.
Add FSelectTileGroup.builder.
Add FSelectMenuTile.builder.
Add FScaffold.resizeToAvoidBottomInset.
Add FThemeData.debugLabel.
Change FCalendarController.date(...) to automatically strip and truncate all DateTimes to dates in UTC timezone.
Change FCalendarController.dates(...) to automatically strip and truncate all DateTimes to dates in UTC timezone.
Change FCalendarController.ranges(...) to automatically strip and truncate all DateTimes to dates in UTC timezone.
Change FCalendar.start to be optional and default to 1st January 1900.
Change FCalendar.end to be optional and default to 1st January 2100.
Change FTheme to internally extend InheritedTheme.
Change FTileGroup to be scrollable.
Change FPopoverMenu to be scrollable.
Change FSelectTileGroup to be scrollable.
Change FSelectMenuTile to be scrollable.
Change ThemeBuildContext to FThemeBuildContext.
Breaking Change Layout to FLayout.
Breaking Change FLocalizations.of(...) to return FLocalizations? instead of FLocalizations - do FLocalizations.of(...) ?? FDefaultLocalizations().
This change is sadly needed as Flutter now forcefully regenerates FLocalizations each time flutter pub get is called.
Breaking Change FTileData.index to FTileData.last.
Breaking Change FPopoverMenu.controller to FPopoverMenu.popoverController.
Breaking Change FSelectTileGroup.controller to FSelectTileGroup.groupController.
Breaking Change FPopoverController.duration to FPopoverController.animationDuration.
Breaking Change FTooltipController.duration to FTooltipController.animationDuration.
Breaking Change FTabController.ignoreDirectionalPadding to FTabController.directionPadding.
Breaking Change FPopover.ignoreDirectionalPadding to FPopover.directionPadding - the value should be inverted.*
Breaking Change FPopoverMenu.ignoreDirectionalPadding to FPopoverMenu.directionPadding - the value should be inverted.
Breaking Change FSelectMenuTile.ignoreDirectionalPadding to FSelectMenuTile.directionPadding - the value should be inverted.
FLabel exhibited incorrect padding when used with Axis.horizontal and RTL layouts.Breaking Change FPopover() to not automatically wrap a target in a GestureDetector - use FPopover.tappable(...) instead.
This update adds responsive breakpoints, focused outlines & localization! It also introduces several new tile widgets.
Add FButtonSpinner.
Add FBreakpoints.
Add FIcon.empty().
Add FTappable.
Add FTile.
Add FTileGroup.
Add FSelectMenuTile.
Add FSelectTile.
Add FSelectTileGroup.
Add FCalendarDayPickerStyle.tileSize.
Add FPopover.ignoreDirectionalPadding.
Add FPopover.tappable(...).
Add FPopoverMenu.
Add FPortal.offset.
Add FLocalizations.
Add FFocusedOutline.
Add FDialog.adaptive(...).
Breaking Add focusedOutlineStyle to FAccordionStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FBottomNavigationBar - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FButtonStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FHeaderActionStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FResizableDividerStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FCheckboxStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FRadioStyle - this only affect users which use the primary constructor.
Breaking Add focusedBorder to FTileStyle - this only affect users which use the primary constructor.
Breaking Add focusedDividerStyle to FTileStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FTabsStyle - this only affect users which use the primary constructor.
Breaking Add focusedOutlineStyle to FSliderThumbStyle - this only affect users which use the primary constructor.
Breaking Change FPopover() to not automatically wrap a target in a GestureDetector - use FPopover.tappable(...)
instead.
Breaking Change FSlider to default to the current text direction instead of Layout.ltr.
Change FCalendar to support localization.
Change FButton's animation to only start on mouse down and up.
Fix FLabel not showing error message if label and description are null.
Fix FSelectGroup not properly disposing callbacks.
Fix range slider not displaying tooltip for minimum thumb.
Breaking Change FBottomNavigationBarItem.label from String to Widget.
Add FAccordion.
Add FSlider.
Add FButtonStyles.ghost.
Add FButtonCustomStyle.enabledHoverBoxDecoration.
Add FTextField.contentInsertionConfiguration.
Add FTextField.mouseCursor.
Add FTextField.forceErrorText.
Add FIcon.
Add FColorScheme.disable(...).
Add FColorScheme.disableOpacity.
Add FColorScheme.hover(...).
Add FColorScheme.enabledHoveredOpacity.
Add FChangeNotifier.
Add FValueNotifier.
Change button to change color when hovering over it.
Change FCalendar year picker to update the header whenever a year is selected.
Increase FCalendar's default text size from FTypography.sm to FTypography.base.
Breaking Change FBottomNavigationBarItem.label from String to Widget.
Breaking Split FCalendarHeaderStyle.iconColor into FCalendarHeaderStyle.enabledIconColor and
FCalendarHeaderStyle.disabledIconColor.
Breaking Change FTextField to use FLabel.
Breaking Remove FTextFieldErrorStyle.animatioDuration.
Breaking Rename FLabelStateStyle to FLabelStateStyles.
Breaking Rename FTextField.onSave to FTextField.onSaved.
Breaking Remove FAlertIcon & FAlertIconStyle - use FIcon instead.
Breaking Remove FButtonIcon & FAlertIconStyle - use FIcon instead.
Breaking Change FButtonCustomStyle to better represent the style's layout - this will only affect users that
create a custom FButtonCustomStyle.
Breaking Change FBottomNavigationBarItem.icon from SvgAsset to Widget - wrap the asset in FIcon instead.
Breaking Change FHeaderAction.icon from SvgAsset to Widget - wrap the asset in FIcon instead.
Breaking Change FSelectGroup.builder parameters.
Breaking Change FBadgeCustomStyle.content to FBadgeCustomStyle.contentStyle.
Breaking Change FAvatarStyle.text to FAvatarStyle.textStyle.
Breaking Change FDialogStyle.horizontal to FDialogStyle.horizontalStyle.
Breaking Change FDialogStyle.selectedLabel to FDialogStyle.selectedLabelTextStyle.
Breaking Change FDialogStyle.unselectedLabel to FDialogStyle.unselectedLabelTextStyle.
Breaking Change FDividerStyle.horizontal to FDividerStyle.horizontalStyle.
Breaking Change FDividerStyle.vertical to FDividerStyle.verticalStyle.
Breaking Change FDialogStyle.indicator to FDialogStyle.indicatorDecoration.
Breaking Change FHeader.leftActions to FHeader.prefixActions.
Breaking Change FHeader.rightActions to FHeader.suffixActions.
Breaking Change FLabelStyle.horizontal to FLabelStyle.horizontalStyle.
Breaking Change FLabelStyle.vertical to FLabelStyle.verticalStyle.
Breaking Change FButtonStyles.outline's background to transparent.
Fix FBottomNavigationBar items hit region being smaller than intended.
Fix FCalendar showing focused outline when pressing and long pressing a date.
Fix FCalendar year and month picker applying incorrect initial top padding.
Fix FCalendar year and month picker incorrectly calculating start and end dates.
Fix FTextfield being vertically larger than intended.
Fix FTextfield description text's odd transition animation whenever an error occurs.
Fix FSwitch not using correct label style.
Fix FCheckbox, FRadio, FSelectGroup, FSwitch and FTextField styles causing the widget inspector to crash.
Fix FSelectGroup not applying correct style if a custom widget-specific style is given.
Fix FTabs not showing correct tab entry when switching tabs. Issue #203.
FTabs not showing correct tab entry when switching tabs.
Issue #203.The minimum Flutter version has been increased from 3.19.0 to 3.24.0.
The minimum Flutter version has been increased from 3.19.0 to 3.24.0.
Add FButton.icon(...).
Add FBottomNavigationBarData.
Add FButtonData.
Add FCalendarHeaderStyle.buttonStyle.
Add FFormFieldStyle.
Add FHeaderData.
Add FResizable.semanticFormatterCallback.
Add FLabel.
Add label and description to FCheckbox.
Add label and description to FSwitch.
Add FPortal.
Add FPopover.
Add FTooltip.
Add FSelectGroup.
Add FRadio.
Breaking: Change FAlertIconStyle.height to FAlertIconStyle.size.
Breaking: Rename FBottomNavigationBar.items to FBottomNavigationBar.children.
Breaking: Remove FBottomNavigationBar.raw(...) - use the default constructor instead.
Breaking: Rename FButtonIconStyle.height to FButtonIconStyle.size.
Breaking: Change FDivider.vertical to FDivider.axis.
Change FResizable to resize by FResizable.resizePercentage when using a keyboard.
Breaking: Change FResiableDividerStyle.thickness to FResizableDividerStyle.width.
Change FTextFieldStyle to inherit from FFormFieldStyle.
Change FTextField to display error under description instead of replacing it.
Breaking: Change FTextField.help to FTextField.description.
Breaking: Change how FTextFieldStyle stores various state-dependent styles.
Breaking: Remove FTextField.error - use FTextField.forceErrorText instead.
Change FTabController to implement ChangeNotifier instead of Listenable.
Breaking: Flattened FStyle.formFieldStyle - use FStyle.enabledFormFieldStyle, FStyle.disabledFormFieldStyle,
andFStyle.errorFormFieldStyle.
Improve platform detection for web when initializing platform-specific variables.
Breaking: FCheckbox and FSwitch no longer wraps FormField - consider wrapping them in a FormField if
required.
Breaking: Require FTheme to be wrapped in a CupertinoApp, MaterialApp or WidgetsApp.
Fix FResizable not rendering properly in an expanded widget when its crossAxisExtent is null.
Fix FTextField not changing error text color when an error occurs.
Fix FTextField error message replacing the description text.
Fix FCheckboxStyle.inherit(...) icon color inheriting from the wrong color.
Fix FTabs not handling indexes properly.
Breaking: Add FCalendarEntryStyle.focusedBorderColor. This only affects users that customized FCalendarEntryStyle.
Add FAvatar.
Breaking: Add FCalendarEntryStyle.focusedBorderColor. This only affects users that
customized FCalendarEntryStyle.
Add FResizable.
Add image parameter to FCard.
Change number of years displayed per page in FCalendar from 12 to 15.
Breaking: Move FCalendar.enabled to FCalendarController.selectable(...).
Breaking: Rename FCalendarController.contains(...) to FCalendarController.selected(...).
Breaking: Rename FCalendarController.onPress(...) to FCalendarController.select(...).
Breaking: Rename FCalendarEntryStyle.focusedBackgroundColor to FCalendarEntryStyle.hoveredBackgroundColor.
This only affects users that customized FCalendarEntryStyle.
Breaking: Rename FCalendarEntryStyle.focusedTextStyle to FCalendarEntryStyle.hoveredTextStyle.
This only affects users that customized FCalendarEntryStyle.
Breaking: Move FCalendarSingleValueController to FCalendarController.date(...).
Breaking: Move FCalendarMultiValueController to FCalendarController.dates(...).
Breaking: Rename FCalendarSingleRangeController to FCalendarRangeController.range(...).
Breaking: Rename FSeparator to FDivider.
Breaking: Remove colorScheme, typography and style parameters from FThemeData.copyWith(...).
The problem was widget-specific styles not being re-created after the removed parameters were updated.
This led to unintuitive behavior where the style of a widget was not updated when the FThemeData was updated.
This should only affect people that customize FThemeData. Use the FThemeData.inherit(...) constructor instead.
Fix FCalendar dates & FButtons not being toggleable using Enter key.
Fix FCalendar dates sometimes not being navigable using arrow keys.
Breaking Change FSwitch to be usable in Forms.
Add FAlert
Add FCalendar
Add FBottomNavigationBar
Breaking Change FSwitch to be usable in Forms.
Breaking Rename FThemeData.checkBoxStyle to FThemeData.checkboxStyle for consistency.
style parameter for FCheckbox.Breaking Move FHeaderStyle to FHeaderStyles.rootStyle.
Add FCheckbox.
Add FHeader.nested.
Add FProgress.
Breaking Move FHeaderStyle to FHeaderStyles.rootStyle.
Breaking Move FHeaderActionStyle.padding to FRootHeaderStyle.actionSpacing.
Breaking Suffix style parameters with Style, i.e. FRootHeaderStyle.action has been renamed to
FRootHeaderStyle.actionStyle.
Breaking Raw fields have been removed, wrap strings with the Text() widget. E.g. FButton(label: 'Hello') or
FButton(rawLabel: 'Hello') should be replaced with FButton(label: Text('Hello')).
Change FTextField to be usable in Forms.
Change FTextFieldStyle's default vertical content padding from 5 to 15.
Split exports in forui.dart into sub-libraries.
Fix missing key parameter in FTextField constructors.
Breaking FButton.prefixIcon and FButton.suffixIcon have been renamed to FButton.prefix and FButton.suffix.
Fix padding inconsistencies in FCard and FDialog.
Fix broken images in README.md.
Fix broken images in README.md.
Fix broken images in README.md (yet again).
* Initial release! 🚀
Your coding agent can read these notes before it upgrades. Set up the MCP server →