fluent_ui
Implements Microsoft's Windows User Interface in Flutter.
4.16.1
26K downloads/mo
#1973 most downloaded on pub.dev
bdlukaa/fluent_ui
What this package is like to depend on
Last release 21 days ago
03 Aug 2026
Release timing varies
gaps range from 2 weeks to 5 months
Nearly every release is documented
notes for 124 of 125 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
130 releases · first in 2021
6 releases in the last 12 months
see the full history below
Release timeline
130 releases · Feb 2021 to Aug 2026Releases
latest 60 of 130-
4.16.103 Aug 2026Release notes
Open source →What's Changed
- Menu bar rework by @bdlukaa in #1337
- feat: Migrate Tooltip to RawTooltip by @bdlukaa in #1338
- NumberBox Focus by @WinXaito in #1341
- fix: keep TabView bodies attached to their tabs during reorder by @diluculo in #1344
- Allow TitleBar to not respond to onDoubleTap to fix visible delay on clicks by @artdedeco in #1340
AutoSuggestBox.popupDirectionby @bdlukaa in #1345- Fix ComboBox single-item dropdown crash on open by @bdlukaa with @Copilot in #1347
- Fix ComboBox height clipping under text scaling by @bdlukaa with @Copilot in #1348
New Contributors
- @artdedeco made their first contribution in #1340
Full Changelog: v4.16.0...v4.16.1
Release notes
Open source →- fix:
ComboBoxno longer throws when opening a dropdown with a single item (#1347) - fix:
TabViewnow keeps each tab's body (and its state) attached to its tab when tabs are reordered, instead of leaving a stateful body parked at its old slot while the header moves - feat:
MenuBar.overflowBehavior(#1337)MenuBarnow usesRawMenuBarunder the hood. - feat:
Tooltip.enableTapToDismissandTooltip.onTriggered(#1338)Tooltipnow usesRawTooltipunder the hood. - refactor(perf):
TitleBarnow doesn't listen foronDoubleTapif the caller doesn't provide a callback. Listening foronDoubleTapcauses a 300ms delay on single taps (#1340) - fix:
NumberBoxfix focus (using tab) whenclearButtonis true (#1341) - fix:
ComboBoxnow expands vertically for larger text scaling, preventing clipped text (#1342) - feat:
AutoSuggestBox.popupDirection(#1345)
-
4.16.028 Jun 2026Release notes
Open source →- refactor: Flutter 3.44.0 support
- fix:
MenuBarnow doesn't throw "Duplicated Global Key" and/or Rendering exceptions when hovering on differentMenuBarItem(s) with the flyout open (#1334) - fix:
Tooltipnow correctly uses constructor-given style ((#1321)[https://github.com//pull/1321]) - fix: Correctly apply
ButtonStyle.textStyletoButtons content (#1318) - fix: Correctly forward navigation view theme to flyout items (#1325)
- fix(mobile):
TitleBarnow accounts for view padding (05c122b) - fix:
FluentTextSelectionToolbarno longer ignores customContextMenuButtonItems (#1317) - fix:
NumberBoxremove ghost focus and do not focus inline buttons anymore (#1332)
What's Changed
- fix: NavigationView compact pane PaneItemExpander flyout size and position by @bdlukaa with @Copilot in #1310
- fix: MenuFlyout sub-item tree direction and icon in RTL mode by @bdlukaa with @Copilot in #1313
- fix(NavigationView): prevent spurious overlay flash when auto mode resizes from minimal → compact by @bdlukaa with @Copilot in #1316
- fix: Tab draggable from full area including padding by @bdlukaa with @Copilot in #1315
- fix: TitleBar height shrinks when window width is reduced by @bdlukaa with @Copilot in #1309
- fix:
Tooltipnow correctly uses constructor-given style by @jacksonb-cs in #1321 - chore: add tests for button inherited text style by @jacksonb-cs in #1322
- Selection toolbar by @bdlukaa in #1330
- fix(numberbox): skip traversal and inline buttons by @WinXaito in #1332
- Fixed Hovering behaviour with open MenuBar by @ProgettiPascon in #1335
New Contributors
- @ProgettiPascon made their first contribution in #1335
Full Changelog: v4.15.0...v4.16.0
Release notes
Open source →- refactor: Flutter 3.44.0 support
- fix:
MenuBarnow doesn't throw "Duplicated Global Key" and/or Rendering exceptions when hovering on differentMenuBarItem(s) with the flyout open (#1334) - fix:
Tooltipnow correctly uses constructor-given style ((#1321)[https://github.com/bdlukaa/fluent_ui/pull/1321]) - fix: Correctly apply
ButtonStyle.textStyletoButtons content (#1318) - fix: Correctly forward navigation view theme to flyout items (#1325)
- fix(mobile):
TitleBarnow accounts for view padding (05c122b) - fix:
FluentTextSelectionToolbarno longer ignores customContextMenuButtonItems (#1317) - fix:
NumberBoxremove ghost focus and do not focus inline buttons anymore (#1332)
-
4.15.127 Mar 2026Release notes
Open source →- fix:
NavigationViewauto display mode no longer shows a brief overlay when resizing from minimal to compact mode (#1316) - fix:
MenuFlyoutsub-item tree now correctly expands to the left and shows achevron_lefticon when right-to-left directionality is enabled (#1342) - fix:
NavigationViewcompact panePaneItemExpanderflyout is now correctly placed in right-to-left directionality; FlyoutleftTopandrightTopplacement modes now correctly align with the top of the target element when the flyout is taller than the available space above the target (#1289) - fix:
TabinTabViewis now draggable from its entire area, including the padding (#1356)
- fix:
-
4.15.006 Mar 2026Release notes
Open source →- fix:
MenuFlyoutno longer throwsTypeErroron sub-items (#1337) - feat: Controls now respond to
VisualDensityfromFluentThemeDatafor compact sizing. UseFluentThemeData(visualDensity: VisualDensity.compact)to enable compact mode (#1175) - fix:
NavigationViewno longer throwsBoxConstraints has a negative minimum heightwhen header and menu button are both absent (#1334) - fix:
ProgressBarchooses the correct direction when directionality is right-to-left (#1291) - fix: Flyout's bottom shadow no longer clipped in bottom placement modes (#1323)
- fix: Correctly handle system text scaling on
DatePicker,TimePicker,AutoSuggestBox,CalendarDatePickerpopups (#1321, #1286) - BREAKING feat: Rename
RatingBartoRatingControl, and updated its style (#1274) - fix:
NumberBoxcompact overlay is now positioned correctly on right-to-left directionality (#1326) - BREAKING feat: Add
TreeViewControllerfor programmatic control ofTreeView(#1140)TreeViewControllerprovides methods:getItemFromValue(),addItem(),addItems(),removeItem(),moveItem(),expandItem(),collapseItem(),expandAll(),collapseAll(),selectItem(),deselectItem(),selectAll(),deselectAll()- Reordering items is supported via
controller.moveItem(item, newParent: target, index: 0)
- BREAKING feat:
TreeViewItem.childrenis now unmodifiable. UseTreeViewControllermethods (addItem(),addItems(),removeItem(),moveItem()) to modify tree structure. - feat:
TitleBarnow supports double-click callback to maximize or restore the window (#1298) - fix: Correctly apply
TitleBar'sisBackButtonEnabled(#1298)
What's Changed
- Fix TimePicker/DatePicker popup overflow when system text scaling is active by @Copilot in #1286
- feat: Update rating control, add example and update changelog by @bdlukaa in #1288
- fix: Remove ClipRect after flyout animation completes to prevent shadow clipping by @Copilot in #1295
- Fix NumberBox compact overlay positioning for RTL directionality by @Copilot in #1293
- Fix ProgressBar RTL direction by @Copilot in #1294
- Add double tap callback to title bar by @frg2089 in #1298
- feat: Add TreeViewController with programmatic reordering to TreeView by @Copilot in #1297
- fix: NavigationView negative BoxConstraints when header and menu button are absent by @Copilot in #1299
- feat: Implement compact sizing for controls via VisualDensity by @Copilot in #1301
- fix: MenuFlyout TypeError on findRenderObject in sub-item hover handler by @Copilot in #1306
- Fix Tooltip child state loss when cursor enters/leaves window by @Copilot in #1303
New Contributors
Full Changelog: v4.14.0...v4.15.0
Release notes
Open source →- fix:
MenuFlyoutno longer throwsTypeErroron sub-items (#1337) - feat: Controls now respond to
VisualDensityfromFluentThemeDatafor compact sizing. UseFluentThemeData(visualDensity: VisualDensity.compact)to enable compact mode (#1175) - fix:
NavigationViewno longer throwsBoxConstraints has a negative minimum heightwhen header and menu button are both absent (#1334) - fix:
ProgressBarchooses the correct direction when directionality is right-to-left (#1291) - fix: Flyout's bottom shadow no longer clipped in bottom placement modes (#1323)
- fix: Correctly handle system text scaling on
DatePicker,TimePicker,AutoSuggestBox,CalendarDatePickerpopups (#1321, #1286) - BREAKING feat: Rename
RatingBartoRatingControl, and updated its style (#1274) - fix:
NumberBoxcompact overlay is now positioned correctly on right-to-left directionality (#1326) - BREAKING feat: Add
TreeViewControllerfor programmatic control ofTreeView(#1140)TreeViewControllerprovides methods:getItemFromValue(),addItem(),addItems(),removeItem(),moveItem(),expandItem(),collapseItem(),expandAll(),collapseAll(),selectItem(),deselectItem(),selectAll(),deselectAll()- Reordering items is supported via
controller.moveItem(item, newParent: target, index: 0)
- BREAKING feat:
TreeViewItem.childrenis now unmodifiable. UseTreeViewControllermethods (addItem(),addItems(),removeItem(),moveItem()) to modify tree structure. - feat:
TitleBarnow supports double-click callback to maximize or restore the window (#1298) - fix: Correctly apply
TitleBar'sisBackButtonEnabled(#1298) - fix:
TitleBarheight no longer shrinks when the window is resized to a smaller width (#1340)
- fix:
-
4.14.021 Feb 2026Release notes
Open source →-
refactor: Consistent theme classes
-
fix:
CalendarDatePickerthrows state error when selecting date (#1251) -
feat: Named constructors for
InfoBar(#1247)InfoBar.info(title: Text(error)); InfoBar.warning(title: Text(error)); InfoBar.success(title: Text(error)); InfoBar.error(title: Text(error)); -
refactor: Expose
TooltipState -
fix:
NumberBoxcallsonChanged()when clicked on (#1196) -
feat: Add
NumberBox.parser, which allows to use a custom parse function for the number box. (#1166) -
feat: Support long pressing on
NumberBoxincrement and decrement buttons. AddedNumberBox.interval(#1267, #843, #1285) -
fix: Correctly lerp between theme properties (#953)
-
fix: Correctly apply theme durations to animations (#1231)
-
feat: Apply text height on
Typography -
refactor: Encourage usage of
EdgeInsetsDirectionalinstead ofEdgeInsets -
BREAKING CHANGE refactor: Remove
BottomNavigationBarand all its related widgets -
MINOR BREAKING refactor: Remove
Brightness.isLight,Brightness.isDarkandBrightness.oppositeextension methods. Useswitchstatements instead. Before:final theme = FluentTheme.of(context); final color = theme.brightness.isDark ? Colors.white : Colors.black;After:
final theme = FluentTheme.of(context); final color = switch (theme.brightness) { Brightness.light => Colors.black, Brightness.dark => Colors.white, }; -
feat: Add latest color resources from Microsoft UI XAML.
-
refactor(perf): Optimize animation handling in Scrollbar, NavigationView, Acrylic and buttons.
-
refactor(perf): Reduce calls to
setStateand frames scheduling in several widgets. -
BREAKING CHANGE
NavigationViewreworked to be more flexible and match the Windows UI 3 specs.- Renamed
PaneDisplayMode.opentoPaneDisplayMode.expanded. - Renamed
appBartotitleBar. - Removed
NavigationAppBarclass. Any widget can now be a title bar. - Introduced the
TitleBarwidget, which matches the design and functionality of a Window title bar. - Added
PaneBackButtonwidget, a button that allows the user to pop the current route. - Added
PaneToggleButtonwidget, a button that opens or close the navigation view pane. (#1051) - Added
NavigationPane.toggleButtonPosition, which sets the preferred position of the toggle button. (#669) PaneItems are now lazy-loaded, improving overall performance (#742)- Updated
StickyNavigationIndicatoranimation to match Win UI 3 specs (#540) - Updated colors and margins to match Win UI 3 specs (#1181)
PaneItemExpandernow supports deep nesting (#1019)PaneItemExpanderno longer resets itself when the tree is updated. (#876)PaneItemExpanderdoesn't require a body anymore. If no body is provided, the item will not be selectable. (#1189)- Keyboard Navigation was enhanced. Items are visible in the scroll view when focused.
- Updated content management to only display the current visible item at once. (#1101)
- Expose
NavigationViewimportant data usingNavigationView.dataOf(context) - Added
NavigationPane.acrylicDisabled, which allows disabling acrylic material effect of the pane overlays InfoBadgestyle variants (success, attention, critical), dot badges and adaptive sizing (#1277)NavigationViewholds a local history. UseNavigationView.of(context).pop()orPaneBackButtonto navigate to the previous index (#1266)
- Renamed
-
chore: Updated Russian translations (#1253)
-
Update Chinese translations (#1283)
-
BREAKING CHANGE
RadioButtonAPI reworked to useRadioGroupfor state management.- Removed
checkedandonChangedparameters fromRadioButton. - Added required
valueparameter toRadioButton<T>. - Radio buttons must now be wrapped in a
RadioGroup<T>, which holdsgroupValueandonChanged. - Radio buttons are no longer toggleable (selecting an already-selected button has no effect).
Before:
RadioButton( checked: selectedIndex == 0, onChanged: (value) { if (value) setState(() => selectedIndex = 0); }, content: Text('Option 1'), )After:
RadioGroup<int>( groupValue: selectedIndex, onChanged: (value) { if (value != null) setState(() => selectedIndex = value); }, child: Column( children: [ RadioButton<int>(value: 0, content: Text('Option 1')), RadioButton<int>(value: 1, content: Text('Option 2')), ], ), ) - Removed
-
fix: Flyout barrier color (#1276)
-
-
4.13.023 Sep 2025Release notes
Open source →-
fix: NavigationView transition when in top (#1220)
-
feat: Added
CalendarViewwidget (#1232 thanks to @asmitta-01, #236) -
feat: Added
CalendarDatePicker(#236) -
feat: Added
WindowsIconandWindowsIcons(#1237) -
fix:
Sliderlabel on drag (#1248) -
fix:
closeAfterClickat the item level is no longer ignored onDropDownButton(#1245) -
MINOR BREAKING feat:
FlyoutController.closecan now return a value to the previous route. (#1246) Before:// normally close the flyout flyoutController.close(); // forcefully close the flyout flyoutController.close(true);After:
// normally close the flyout final result = flyoutController.close<String>('my result'); // forcefully close the flyout flyoutController.forceClose(); -
fix: Check if
AutoSuggestBoxis mounted before dismissing overlay (#1228)
-
-
4.12.022 May 2025Release notes
Open source →- feat: Support Flutter 3.32
- feat: Added
TextBox.onTapUpOutside,TextBox.forceLine,TextBox.mouseCursor,TextBox.onAppPrivateCommand,TextBox.onSelectionHandleTapped,TextBox.scrollBehavior,TextBox.textScaler,TextBox.textHeightBehavior,TextBox.textWidthBasis. - feat: Removed
TextBox.clearButtonMode(#1225) - fix:
FlyoutControllerbeing used after disposed (#1224)
-
4.11.517 May 2025 -
4.11.410 May 2025Release notes
Open source →-
feat: Added Tagalog localization support (#1207)
-
feat: Added
ListTile.decorationMarginparameter -
fix: Custom
ContextMenuButtonItemare correctly displayed on text selection control (#1212) -
fix:
TreeView's focus always starts at first or last item (#834, #1195) -
fix:
InfoBarno longer throw error when automatically closing (#955, #1215) -
fix: Properly disable date and time pickers when
onChangedis null (#1210) -
fix:
MenuFlyoutSubItemno longer errors while building whenFlyoutPlacementMode.autois used (#1206, #1191) -
fix: The checkbox inside
ListTile.selectableshould not have its own focus (#1144) -
feat:
BaseButton.onTapUpreflects theGestureDetector.onTapUp(#1201) -
feat: Add
BreadcrumbBar.chevronAlignment(#1213) -
MINOR BREAKING feat:
Tab.backgroundColor,Tab.selectedBackgroundColor,Tab.foregroundColor,Tab.selectedForegroundColorandTab.outlineColorare now instance ofWidgetStateProperty<Color>. (#1214) Before:Tab( backgroundColor: FluentTheme.of(context).inactiveColor, selectedBackgroundColor: Colors.blue, foregroundColor: Colors.white, selectedForegroundColor: Colors.black, outlineColor: Colors.grey, ),After:
Tab( backgroundColor: WidgetStateProperty.resolveWith((_) { return FluentTheme.of(context).inactiveColor; }), selectedBackgroundColor: WidgetStateProperty.all(Colors.blue), foregroundColor: WidgetStateProperty.all(Colors.white), selectedForegroundColor: WidgetStateProperty.all(Colors.black), outlineColor: WidgetStateProperty.all(Colors.grey), ),This allows the
Tabto be customized based on its state, such ashovered,pressed,focused, anddisabled, and to be affected by theme changes.
-
-
4.11.308 Apr 2025Release notes
Open source →- fix:
TabView.newTabIconis now typed as aWidget(#1187) - feat:
Expanded.enabled(#1188) - fix: Correctly apply
TextBox.unfocusedColoron unfocused highlight border (#1192) - fix: Correctly update
TimePicker(#1198) - feat: Keyboard Shortcuts for
TimePickerandDatePickerpopups (#1200) - fix: Add property
enabledtoPaneItemAction(#1202)
- fix:
-
4.11.222 Feb 2025 -
4.11.109 Feb 2025 -
4.11.007 Feb 2025Release notes
Open source →-
fix: hide Tab's close button when
onClosedis null -
feat: Add
TextBox.cursorOpacityAnimates(defaults toFluentThemeData.cursorOpacityAnimates, which defaults tofalse); default setting improves CPU/GPU efficiency while TextBox has focus (#1164) -
fix:
DatePickerselectable range matches the one betweenstartDateandendDate(#1170) -
fix:
ScaffoldPagehas a built-in color if no parentNavigationViewis found (#1168) -
feat: Added
FlyoutController.showFlyout.buildTarget(#1173)Primary items of the command bar are now accessible through the secondary flyout.
-
feat: Added these options to
FlyoutController(#1178)horizontalOffset, which manipulates how the flyout will be positioned horizontally;reverseTransitionDuration, which sets the duration of the reverse transition;transitionCurve, which sets the curve of the transition;
-
feat: Added
FlyoutController.close(#1174) -
fix: Use the correct placement mode in transition when automatic mode is selected (#1178)
-
feat:
FlyoutContentandMenuFlyoutnow match their native counterparts (#1178) -
fix: Jitter when displaying flyouts and sub flyouts (#1014)
-
fix: Menu sub items have the same transition as their parents (#1178)
-
chore:
SubItemShowBehaviorwas renamed toSubItemShowAction(#1178) -
feat: Flyouts are closed when the window size changes (#1178)
-
feat: Added
CommandBarButton.closeAfterClick(#1149) -
fix:
CommandBarsecondary menu preferred placement mode (#1174) -
feat:
CommandBarStateis now accessible, making it possible to open/close the secondary flyout programmatically (#1174)final commandBarKey = GlobalKey<CommandBarState>(); CommandBar( key: commandBarKey, ..., ), commandBarKey.currentState?.toggleSecondaryMenu(); commandBarKey.currentState?.secondaryFlyoutController.close(); -
fix:
TextBoxalignment no longer depend on decoration (#1027) -
feat: Added
TextBox.undoControllerand implemented "Undo" action in toolbar options (#1175) -
feat: Handle
TextBoxcontext menu controls on mobile platforms (#1022) -
fix: Default
TextBoxborder -
feat: Added Nepali localization support (#1177)
-
feat: Teaching Tips (#412)
-
feat: Added more flyout placement modes:
leftTop,leftCenter,leftBottom,rightTop,rightCenterandrightBottom.leftandrightare now deprecated and default toleftCenterandrightCenter, respectively. Additionally, added thefullplacement mode, which allows the flyout to position itself within the screen. (#570)
-
-
4.10.013 Dec 2024Release notes
Open source →-
fix: Add missing properties (
closeIconSize,closeButtonStyle) indebugFillPropertiesandInfoBarThemeData.merge(#1128 -
feat: Add
TabView.reservedStripWidth, which adds a minimum empty area between the tabs and the tab view footer (#1106)] -
fix: Correctly unfocus
NumberBoxwhen user taps outside (#1135) -
fix: Do try to scroll Date and Time at build time (#1117)
-
feat: Use a
Decorationinstead ofColorinNavigationAppBar(#1118) -
feat: Add
EditableComboBox.inputFormatters(#1041) -
BREAKING feat:
TextBox.decorationandTextBox.foregroundDecorationare now of typeWidgetStateProperty(#987)Before:
TextBox( decoration: BoxDecoration( color: Colors.red, ), foregroundDecoration: BoxDecoration( color: Colors.blue, ), ),
After:
TextBox( decoration: WidgetStateProperty.all(BoxDecoration( color: Colors.red, )), foregroundDecoration: WidgetStateProperty.all(BoxDecoration( color: Colors.blue, )), ),
-
feat: Add
TabView.gestures, which allows the manipulation of the tab gestures (#1138) -
feat: Add
DropDownButton.style(#1139) -
feat: Possibility to open date and time pickers programatically (#1142)
-
fix:
TimePickerhour offset -
feat: Add
ColorPicker(#1152) -
fix:
NumberBoxinitial value formatting (#1153) -
fix:
NumberBoxincrementing/decrementing when not focused (#1124) -
fix:
NumberBoxtext is correctly when there are no visible actions (#1150)
What's Changed
- Add missing properties in InfoBarThemeData.merge by @WinXaito in #1128
- feat: Make the example work on Linux by @iamsergio in #1129
- Add support for reserved footer area by @diluculo in #1137
- Fix(menu): boundary by @web-liuyang in #1131
- Make text box decorations affected by the current widget state by @hassony105 in #987
- Implements ColorPicker by @diluculo in #1152
- Localization for ColorPicker by @diluculo in #1154
- Flutter latest by @bdlukaa in #1156
New Contributors
- @iamsergio made their first contribution in #1129
- @diluculo made their first contribution in #1137
- @web-liuyang made their first contribution in #1131
- @hassony105 made their first contribution in #987
Full Changelog: v4.9.2...v4.10.0
Release notes
Open source →-
fix: Add missing properties (
closeIconSize,closeButtonStyle) indebugFillPropertiesandInfoBarThemeData.merge(#1128 -
feat: Add
TabView.reservedStripWidth, which adds a minimum empty area between the tabs and the tab view footer (#1106)] -
fix: Correctly unfocus
NumberBoxwhen user taps outside (#1135) -
fix: Do try to scroll Date and Time at build time (#1117)
-
feat: Use a
Decorationinstead ofColorinNavigationAppBar(#1118) -
feat: Add
EditableComboBox.inputFormatters(#1041) -
BREAKING feat:
TextBox.decorationandTextBox.foregroundDecorationare now of typeWidgetStateProperty(#987)Before:
TextBox( decoration: BoxDecoration( color: Colors.red, ), foregroundDecoration: BoxDecoration( color: Colors.blue, ), ),After:
TextBox( decoration: WidgetStateProperty.all(BoxDecoration( color: Colors.red, )), foregroundDecoration: WidgetStateProperty.all(BoxDecoration( color: Colors.blue, )), ), -
feat: Add
TabView.gestures, which allows the manipulation of the tab gestures (#1138) -
feat: Add
DropDownButton.style(#1139) -
feat: Possibility to open date and time pickers programmatically (#1142)
-
fix:
TimePickerhour offset -
feat: Add
ColorPicker(#1152) -
fix:
NumberBoxinitial value formatting (#1153) -
fix:
NumberBoxincrementing/decrementing when not focused (#1124) -
fix:
NumberBoxtext is correctly when there are no visible actions (#1150)
-
-
4.9.209 Oct 2024Release notes
Open source →- feat:
NavigationAppBar.leadingnow has a minimum width ofkCompactNavigationPaneWidthinstead of being fixed to this width (#1103) - feat: Add
TabView.stripBuilder(#1106) - fix: Correctly apply
EditableComboBox.style(#1121) - feat: Add
BreadcrumbBar.chevronIconBuilderandBreadcrumbBar.chevronIconSize(#1111) - fix: Consider object translation on Menu Flyouts (#1104)
- fix: Correctly disable
DropDownButtonitems ifonPressedis not provided (#1116) - feat: Add
ToggleMenuFlyoutItemandRadioMenuFlyoutItem(#1108)
What's Changed
- Change NavigationAppBar leading widget to be min width instead of fix… by @nu11ptr in #1103
- The EditableComboBox is missing the part that applies the style to the TextBox, so add it. by @hanwha-cheoldong in #1121
New Contributors
- @nu11ptr made their first contribution in #1103
- @hanwha-cheoldong made their first contribution in #1121
Full Changelog: v4.9.1...v4.9.2
Release notes
Open source →-
feat:
NavigationAppBar.leadingnow has a minimum width ofkCompactNavigationPaneWidthinstead of being fixed to this width (#1103) -
feat: Add
TabView.stripBuilder(#1106) -
fix: Correctly apply
EditableComboBox.style(#1121) -
feat: Add
BreadcrumbBar.chevronIconBuilderandBreadcrumbBar.chevronIconSize(#1111) -
fix: Consider object translation on Menu Flyouts (#1104)
-
fix: Correctly disable
DropDownButtonitems ifonPressedis not provided (#1116) -
feat: Add
ToggleMenuFlyoutItemandRadioMenuFlyoutItem(#1108)
- feat:
-
4.9.107 Aug 2024Release notes
Open source →- feat: ¹
NumberBoxnow supports precision greater than 4. ² AddNumberBox.pattern,NumberBox.formatter,NumberBox.format(#1080)
- fix: Resolved issue where
PaneItemwithinPaneItemExpanderremained accessible inNavigationPanecompact mode (#1081) - fix: Correct number of days on
DatePickerpopup (#1049) - feat: Create
PaneItemWidgetAdapter(#1087) - feat: Add
maxWidthtoTooltipThemeDatafor optional wrapping of long tooltips (#1094) - fix: Fixed compile errors with Flutter 3.24.0 stable (#1097)
What's Changed
- Fix:
PaneItemBehavior in Compact Mode by @WXL-steven in #1082 - fix: Update NumberBox formatting pattern for precision by @FourLeafTec in #1080
- Add maxWidth to tooltip theme for easy text-wrapping by @klondikedragon in #1095
- Remove checkerboarding parameters and properties as Flutter 3.24 removed them by @h3x4d3c1m4l in #1097
New Contributors
- @WXL-steven made their first contribution in #1082
- @FourLeafTec made their first contribution in #1080
Full Changelog: v4.9.0...v4.9.1
Release notes
Open source →- feat: ¹
NumberBoxnow supports precision greater than 4. ² AddNumberBox.pattern,NumberBox.formatter,NumberBox.format(#1080) - fix: Resolved issue where
PaneItemwithinPaneItemExpanderremained accessible inNavigationPanecompact mode (#1081) - fix: Correct number of days on
DatePickerpopup (#1049) - feat: Create
PaneItemWidgetAdapter(#1087) - feat: Add
maxWidthtoTooltipThemeDatafor optional wrapping of long tooltips (#1094) - fix: Fixed compile errors with Flutter 3.24.0 stable (#1097)
- feat: ¹
-
4.9.030 Jun 2024Release notes
Open source →-
fix: ¹
DropDownButton.closeAfterClickis now correctly applied. ² AddedMenuFlyoutItem.closeAfterClick, which defaults totrue. (#1016) -
fix:
MenuFlyoutSubItemdoes not close when pressed (#1037) -
fix: Make
ScaffoldPageopaque (#1048) -
fix: Scroll issue in
DatePicker. (#1054) -
feat: Add
NumberBox.textInputActionandNumberBox.onEditingComplete(#1063) -
fix:
NumberBoxdoes not calls a rebuild when it is already building (#1064) -
feat: Add
Tab.color,Tab.selectedColorandTab.outlineColorto TabView (#1068) -
feat: Added
NavigationView.onItemPressedcallback, called when the item is on tap (#1067) -
fix: Mark
MenuFlyoutItemas disabled when.onPressedisnull(#1074) -
BREAKING feat: Removed
ButtonState,ButtonStatesand their related classes. UseWidgetStateProperty,WidgetStateinstead. (#1075)
Before:Button( style: ButtonStyle( shape: ButtonState.all(RoundedRectangleBorder(...)), backgroundColor: ButtonState.resolveWith((states) { if (states.isPressed) { return Colors.blue.shade900; } return Colors.blue; }), foregroundColor: ButtonState.resolveWith((states) { return ButtonState.forStates<Color>( states, disabled: Colors.grey, hovered: Colors.white.withOpacity(0.8), pressed: Colors.white.withOpacity(0.6), ); }), ), ),
After:
Button( style: ButtonStyle( shape: WidgetStatePropertyAll(RoundedRectangleBorder(...)), backgroundColor: WidgetStateProperty.resolveWith((states) { if (states.isPressed) { return Colors.blue.shade900; } return Colors.blue; }), foregroundColor: WidgetStateProperty.resolveWith((states) { return WidgetStateExtension.forStates<Color>( states, disabled: Colors.grey, hovered: Colors.white.withOpacity(0.8), pressed: Colors.white.withOpacity(0.6), ); }), ), ),
-
fix: Do not dismiss Scrollbar if it is still being pressed (#1077)
-
feat: Make
Taba widget that can be overridable (#1050)
To create a custom Tab, you can now extendTab:class MyCustomTab extends Tab { MyCustomTab({super.key, required super.text, required super.body}); @override State<Tab> createState() => MyCustomTabState(); } class MyCustomTabState extends TabState { @override Widget build(BuildContext context) { super.build(context); return ColoredBox( color: Colors.red, child: super.build(context), ); } }
Explore the
TabStatereference to see all the available methods you can override. -
feat: Deprecate
TabView.addIconDataandTabView.addIconBuilder. UseTabView.newTabIconinstead. -
fix:
TabView.closeDelayDurationdefault value is now 1 second.
New Contributors
- @franklin83diaz made their first contribution in #978
- @Abbas1Hussein made their first contribution in #964
- @dhafinrayhan made their first contribution in #982
- @H2Sxxa made their first contribution in #990
- @dmacan23 made their first contribution in #1004
- @thai2706 made their first contribution in #1005
- @dev-aniketj made their first contribution in #1046
- @normalllll made their first contribution in #1047
- @fischerscode made their first contribution in #1040
- @Dusk-afk made their first contribution in #1055
- @ClanEver made their first contribution in #1056
- @dmk-rib made their first contribution in #1068
- @mmasdivins made their first contribution in #1070
Full Changelog: v4.8.0...v4.9.0
Release notes
Open source →-
fix: ¹
DropDownButton.closeAfterClickis now correctly applied. ² AddedMenuFlyoutItem.closeAfterClick, which defaults totrue. (#1016) -
fix:
MenuFlyoutSubItemdoes not close when pressed (#1037) -
fix: Make
ScaffoldPageopaque (#1048) -
fix: Scroll issue in
DatePicker. (#1054) -
feat: Add
NumberBox.textInputActionandNumberBox.onEditingComplete(#1063) -
fix:
NumberBoxdoes not calls a rebuild when it is already building (#1064) -
feat: Add
Tab.color,Tab.selectedColorandTab.outlineColorto TabView (#1068) -
feat: Added
NavigationView.onItemPressedcallback, called when the item is on tap (#1067) -
fix: Mark
MenuFlyoutItemas disabled when.onPressedisnull(#1074) -
BREAKING feat: Removed
ButtonState,ButtonStatesand their related classes. UseWidgetStateProperty,WidgetStateinstead. (#1075) Before:Button( style: ButtonStyle( shape: ButtonState.all(RoundedRectangleBorder(...)), backgroundColor: ButtonState.resolveWith((states) { if (states.isPressed) { return Colors.blue.shade900; } return Colors.blue; }), foregroundColor: ButtonState.resolveWith((states) { return ButtonState.forStates<Color>( states, disabled: Colors.grey, hovered: Colors.white.withValues(alpha: 0.8), pressed: Colors.white.withValues(alpha: 0.6), ); }), ), ),After:
Button( style: ButtonStyle( shape: WidgetStatePropertyAll(RoundedRectangleBorder(...)), backgroundColor: WidgetStateProperty.resolveWith((states) { if (states.isPressed) { return Colors.blue.shade900; } return Colors.blue; }), foregroundColor: WidgetStateProperty.resolveWith((states) { return WidgetStateExtension.forStates<Color>( states, disabled: Colors.grey, hovered: Colors.white.withValues(alpha: 0.8), pressed: Colors.white.withValues(alpha: 0.6), ); }), ), ), -
fix: Do not dismiss Scrollbar if it is still being pressed (#1077)
-
feat: Make
Taba widget that can be overridable (#1050) To create a custom Tab, you can now extendTab:class MyCustomTab extends Tab { MyCustomTab({super.key, required super.text, required super.body}); @override State<Tab> createState() => MyCustomTabState(); } class MyCustomTabState extends TabState { @override Widget build(BuildContext context) { super.build(context); return ColoredBox( color: Colors.red, child: super.build(context), ); } }Explore the
TabStatereference to see all the available methods you can override. -
feat: Deprecate
TabView.addIconDataandTabView.addIconBuilder. UseTabView.newTabIconinstead. -
fix:
TabView.closeDelayDurationdefault value is now 1 second.
-
-
4.8.708 Apr 2024 -
4.8.606 Feb 2024Release notes
Open source →- fix: Pop the menu flyout before than calling the close callback (#1009)
- fix:
Button.childis now vertically centered (#1011) - fix: Adjust
Button's foreground color when hovered and pressed (#1012) - feat: Added
.textControllerand.onTextChangedtoEditableComboBox. (#1017) - fix: Do not show the selected indicator on the combo box popup if the current value is not present in the items list.
-
4.8.513 Jan 2024 -
4.8.405 Jan 2024 -
4.8.329 Dec 2023 -
4.8.209 Dec 2023 -
4.8.127 Nov 2023 -
4.8.025 Nov 2023Release notes
Open source →What's Changed
-
Correctly paint buttons borders (#956)
-
MINOR BREAKING Removed
ButtonStyle.border. UseButtonStyle.shapeinstead:
Before:Button( style: ButtonStyle( border: ButtonState.all(BorderSide(...)), ), ),
Now:
Button( style: ButtonStyle( shape: ButtonState.all(RoundedRectangleBorder(...)), ), ),
-
BREAKING Removed
Chipand its related widgets. -
BREAKING Removed
PillButtonBarand its related widgets. UseCommandBarinstead. -
BREAKING Removed
SplitButtonBar. UseSplitButtoninstead. -
BREAKING Removed
BottomSheetand its related widgets and functions. -
BREAKING Removed
Snackbar,showSnackbarand their related widgets. UseInfoBaranddisplayInfoBarinstead. -
fix: do not close
InfoBartwice (#955) -
feat: add Kurdish locale (#962)
-
fix: review
debugFillPropertieson widgets (#974) -
fix: Date and Time pickers when localization is not English (#961)
New Contributors
- @Ferry-200 made their first contribution in #956
- @awderz4 made their first contribution in #962
Full Changelog: v4.7.7...v4.8.0
Release notes
Open source →-
fix: Correctly paint buttons borders (#956)
-
MINOR BREAKING Removed
ButtonStyle.border. UseButtonStyle.shapeinstead: Before:Button( style: ButtonStyle( border: ButtonState.all(BorderSide(...)), ), ),Now:
Button( style: ButtonStyle( shape: ButtonState.all(RoundedRectangleBorder(...)), ), ), -
BREAKING Removed
Chipand its related widgets. -
BREAKING Removed
PillButtonBarand its related widgets. UseCommandBarinstead. -
BREAKING Removed
SplitButtonBar. UseSplitButtoninstead. -
BREAKING Removed
BottomSheetand its related widgets and functions. -
BREAKING Removed
Snackbar,showSnackbarand their related widgets. UseInfoBaranddisplayInfoBarinstead. -
fix: do not close
InfoBartwice (#955) -
feat: add Kurdish locale (#962)
-
fix: review
debugFillPropertieson widgets (#974) -
fix: Date and Time pickers when localization is not English (#961)
-
-
4.7.730 Oct 2023Release notes
Open source →What's Changed
- fix:
ProgressRingandProgressBarnow fit correctly the parent bounds (#942) - fix:
TabViewbuttons was only rendered on hover. Now the buttons (add and scroll buttons) are always rendered. - fix:
ComboboxItemcorrectly apply foreground color. AddedComboboxItem.enabled(#949) - Add a support for Cupertino Loclizations from GlobalCupertinoLocalizations, this can help fix some errors when using offical adaptive widgets and other cupertino widgets
- Upgrade the
scroll_posdependecy to the latest version which is 0.5.0
New Contributors
- @freshtechtips made their first contribution in #946
Full Changelog: v4.7.6...v4.7.7
Release notes
Open source →- fix:
ProgressRingandProgressBarnow fit correctly the parent bounds (#942) - fix:
TabViewbuttons was only rendered on hover. Now the buttons (add and scroll buttons) are always rendered. - fix:
ComboboxItemcorrectly apply foreground color. AddedComboboxItem.enabled(#949) - Add a support for Cupertino Loclizations from GlobalCupertinoLocalizations, this can help fix some errors when using offical adaptive widgets and other cupertino widgets
- Upgrade the
scroll_posdependecy to the latest version which is 0.5.0
- fix:
-
4.7.608 Oct 2023 -
4.7.524 Sep 2023 -
4.7.415 Sep 2023Release notes
Open source →- fix: tap on
DatePickerday does not skip a day (#914) - fix: ensure
PaneItemExpander's flyout is attached before using it (#857) - fix: expose more
TextFieldproperties onNumberBox(#933) - fix: expose more
TextFieldproperties onPasswordBox(#925) - fix:
AutoSuggestBox.onOverlayVisibilityChangednow results in the correct state (#926) - fix:
MenuFlyoutSubIteminherits the acrylic data fromMenuFlyout(#932) - fix:
MenuFlyoutSubIteminhertis itsMenuFlyoutparent decoration data (#931) - feat: Expose
paneNavigationButtonIcononNavigationPaneThemeData(#929)
- fix: tap on
-
4.7.317 Aug 2023Release notes
Open source →-
feat: Expose
AutoSuggestBoxState(#912) With it, you can now control theAutoSuggestBoxstate, such as opening and closing the overlay. Use the.dismissOverlaymethod to close the overlay and.showOverlayto display it.Use the
AutoSuggestBox.onOverlayVisibilityChangedcallback to listen to overlay visibility changes. -
fix:
StickyNavigationIndicatornow doesn't stop if another item interrupts the ongoing animation (36b82b) -
fix: Render
Combobox's elevation outside of the clipper (#896) -
fix: Do not make items exclusive on
NavigationView's body (#913) -
fix:
Expander.contenthas now its focus excluded when closed -
fix: Fixed compile errors with Flutter 3.13.0 stable (#915)
-
-
4.7.207 Aug 2023Release notes
Open source →- feat: Add Wifi and Bluetooth icons (#909)
- feat: Add
ListTile.cursor(#901) - feat: Add
Tab.disabled(#904) - feat: Add
NavigationPaneThemeData.overlayBackgroundColor, which is displayed on overlays, such as minimal and compact pane overlays (#903) - fix: Correctly remove tooltip as soon as the mouse leaves the widget (#905)
- fix: Do not show
PaneItem.infoBadgeandPaneItem.trailingwhile the pane is transitioning (#906) - fix:
NavigationView.onOpenSearchis called whenautoSuggestBoxReplacementis pressed (c251600) - fix:
AutoSuggestBoxoverlay is now only displayed after the user started typing (d95970a)
-
4.7.130 Jul 2023Release notes
Open source →- Add vertical support to
CommandBar. (#872) - Deprecated
SplitButtonBarand its related widgets. UseSplitButtonorSplitButton.toggleinstead (#882, #411) - Implement
BreadcrumbBar(#878) - Ensure all widgets use the correct debug checks (#883)
Expanderheader is sized dynamically (#523)- Added
Expander.contentPaddingandExpander.contentShape(#891) - Tooltips are dismissed as soon as the mouse leaves (#898)
- Added
FluentThemeData.selectionColor, which defaults to the accent color normal shade (#897) - Flyout reverse transition duration is properly set (#893)
- Remove view padding when app bar is provided (#884)
NavigationAppBar.titleis expanded to fit the entire width on top mode (#902)AutoSuggestBoxdoes not duplicate focus (#894)StickyNavigationIndicatorlook-and-feel updated to match the native implementation (#380b49c)
- Add vertical support to
-
4.7.007 Jul 2023Release notes
Open source →- Add Slovak localization (#850)
- Add
AutoSuggestBox.itemBuildercallback builder, which builds the items inside the overlay (#869) - Add
AutoSuggestBoxItem.semanticsLabel(#869) - Add
ButtonState.forStates, a helper function to quickly resolve values for each button state (#875) - Slider label color is solid (#847)
- BREAKING Removed
.disabledColor,uncheckedColor,.checkedColorand.borderInputColorfromFluentThemeData. Use the values from theme resources instead (1295b6) - BREAKING To match the native implementation,
ToggleSwitch.thumband.thumbBuilderhave been renamed to.knoband.knobBuilder, respectively.DefaultToggleSwitchThumbwas renamed toDefaultToggleSwitchKnob(e15e89d) - Added
CheckboxThemeData.foregroundColor,RadioButtonThemeData.foregroundColorandToggleSwitchThemeData.foregroundColor, which, by default, reacts if the inputs are disabled or not (#861) ToggleSwitchcorrectly behaves as disabled whenonChangedisnull(4b5afb5)- Add
PaneItemExpander.initiallyExpanded(#864) - Add
NumberFormBox(#862) PaneItem.onTapfromPaneItemExpander.items, when displayed in popup, are now correctly invoked (#859)- Navigating through the
Comboboxitems on web now works properly (#757) TreeViewItem, if selection mode issingle, gets selected when focused with the keyboard (#835)- In multiple selection mode,
TreeView's built-in checkbox now doesn't receive focus. It can now be focused by invoking it with the keyboard (#877) - Enabled click on
DatePickerandTimePicker(#6) DatePicker.endDate.yearis taken into account when displaying the years (#874)DatePicker's day field is now correctly selected (d152dc)DatePickerandTimePickerare correctly fit into the navigator bounds (711390)- Add
TreeView.gesturesBuilderandTreeViewItem.gestures(#851) - Improved overall
Semantics. Now, not every input is treated as a button (2fee45) - Deprecated all mobile widgets:
BottomSheet,Snackbar,ChipandPillButtonBar- and all their related widgets. (c1cfe491) - BREAKING Removed previously deprecated fields (ee601649):
EditableComboboxFormField.value. UseEditableComboboxFormField.initialValueinsteadDatePicker.startYear. UseDatePicker.startDateinsteadDatePicker.endYear. UseDatePicker.endDateinsteadTextButton. UseHyperlinkButtoninsteadTabView.wheelScroll. It is no longer usedThemeData. UseFluentThemeDatainstead
-
4.6.229 May 2023 -
4.6.115 May 2023 -
4.6.010 May 2023 -
4.5.106 May 2023Release notes
Open source →- Do not unfocus the auto suggest box on clear (#816)
- Review all the inputs margins and inputs (#799)
HyperlinkButtonnow uses the correct color in dark mode (#817)DatePicker,TimePickerand all other overlay widgets are now positioned correctly if there are multiple navigators (#817)- Added
PasswordFormBox(#811) DateTime.startYearandDateTime.endYearare now deprecated. UseDateTime.startDateandDateTime.endDateinstead. (#687)- Added
.decoration,.foregroundDecoration,.highlightColor,.unfocusedColor,.keyboardAppearance,.textAlign,.textAlignVerticaltoPasswordBox(#820) - Do not block text style inheritance in widgets (#823)
NavigationViewnow works correctly in top mode (#821)- Add
showDialog.dismissWithEsc(#826)
-
4.5.017 Apr 2023Release notes
Open source →- MINOR BREAKING Remove default value of
backButtonDispatcherwhen usingFluentApp.router(#803) - Add parameters
onTapDownandonTapUpon all buttons. (#795)- Breaking: if you use the abstract class
BaseButton, these two parameters are now required
- Breaking: if you use the abstract class
- Add
PasswordBoxwidget (#795) - Improve example in Navigation/NavigationView in app. (#796)
- Added Tamil language localization. (#798)
- BREAKING CHANGE
TextButtonis renamed toHyperlinkButtonandButtonThemeData.textButtonStyleis renamed toButtonThemeData.hyperlinkButtonStyle(#802) - Added
.notificationPredicate,.scrollbarOrientation,.pressDurationand.minOverscrollLengthtoScrollbar(#809) - Rebuild the
TreeViewelements on item invocation (#810)
- MINOR BREAKING Remove default value of
-
4.4.229 Mar 2023Release notes
Open source →-
Add support for
routerConfigtoFluentApp.router(#781) -
Add source code for
Show InfoBarin example application. (#785) -
Make
coloroptional inFluentApp.router. (#782) -
Fix
TabViewscroll (the item count was not correctly set) and now the scroll event is not propagated to the parent. (#772) -
Do not calculate the position of the flyout if the
positionparameter is provided. (#764) -
Add source code for Surfaces/CommandBar in example application (#766)
-
Do not enforce a max height on
PaneItem(#762) -
Add Greek localization (#761)
-
Add
NavigationState.compactOverlayOpen(#758):final key = GlobalKey<NavigationState>(); NavigationView(key: key); final isCompactModeOpen = key.currentState?.compactOverlayOpen ?? false; -
TabViewlazy loading (#751) -
Added Bangla localization (#786)
-
Correctly position the flyouts and tooltips on a multi navigator context (#780)
-
Allow all kinds of menu flyout widgets on
DropDownButton(#775) -
Added
CommandBarCard.borderColor
-
4.4.107 Mar 2023Release notes
Open source →-
Dynamically adding/removing items in NavigationPane (#744)
-
Fix example application was showing window icons twice on transparency change and maximizing
-
Add
TextFormBox.initialValue(#749) -
Add
PaneItem.enabled(#748) -
Add Thai localization (#750)
-
FocusTraversalGroupis no longer added abovepaneBodyBuilder(#700) -
BREAKING
NavigationView.paneBodyBuildernow takes two arguments (#700) Before:NavigationView( paneBodyBuilder: (child) { return child; } ),Now:
NavigationView( paneBodyBuilder: (item, child) { return child; } ) -
Use correct height and padding on
TextBox(#754) -
Updated
TextBoxcursor to match the native implementation (#754) -
TextBoxstate is now updated correctly when focused (#754)
-
-
4.4.024 Feb 2023Release notes
Open source →TabViewmacos shortcuts (#728)TabViewfocus on children now works properly (#648)TabViewcolors now follow the Win UI 3 theme resources (#730)- Add myanmar localization (#682)
- Fix
ContentDialogcopy code (#735) TextBoxrework:- BREAKING Removed
.initialValue. UseTextEditingController.textinstead - BREAKING Removed
.headerand.headerStyle. UseInfoLabelinstead - BREAKING Removed
.outsidePrefix,.outsidePrefixMode,.outsideSuffix,.outsideSuffixMode - BREAKING Removed
.minHeightand.iconButtonThemeData AutoSuggestBoxpopup is now part of the text box tap region (#698)FluentTextSelectionToolbarnow follows global typography (#712)
- BREAKING Removed
- Attach flyout to target at build time (#743)
-
4.3.008 Feb 2023Release notes
Open source →-
Correctly calculate the padding around the flyout on automatic mode
-
Possibility to supply transparent colors to the barrier (#702)
-
Correctly assign the current pane mode to
PaneItemExpander(#707) -
showFlyout.dismissOnPointerMoveAwaynow takes the whole flyout box into consideration -
MINOR BREAKING Replaced
ContentManagerandContentSizeInfowithFlyoutBefore:final size = ContentSizeInfo.of(context).size;Now:
final size = Flyout.of(context).size;With it, it's also possible to have multiple info about the current open flyout. Sub-menus also have their own flyout instance. To close the current flyout, use
Flyout.of(context).close(); -
Added option to open
DropDownButtonflyout programatically (#723)final dropdownKey = GlobalKey<DropDownButtonState>(); DropDownButton( key: dropdownKey, ... ); dropdownKey.currentState?.open(...); // opens the flyout final isOpen = dropdownKey.currentState?.isOpen ?? false; // checks if the flyout is open -
BREAKING Removed deprecated memebers:
DropDownButtonItemandDropDownButton.buttonStyle(#724) -
ThemeDatais depreacted. UseFluentThemeDatainstead (#722) -
BREAKING
MenuFlyoutSubItem.itemsnow requires a function Before:MenuFlyoutSubItem( items: [...] ),After:
MenuFlyoutSubItem( items: (context) { // You can call Flyout.of(context).close(), for example return [...] }, )
-
-
4.2.026 Jan 2023Release notes
Open source →-
Flyouts rework (#690):
Flyouts were reworked to match the design and behavior of native WinUI 3
BREAKING Removed
Flyoutwidget. To replace it,FlyoutTargetandFlyoutControllerwere created.FlyoutTargetworks like a target, which the givencontrollerwill use to display the flyout
Migration guide:
Before:
final controller = FlyoutController(); Flyout( controller: controller, placement: ..., position: ..., verticalOffset: ..., onOpen: ..., onClose: ..., child: Button( onPressed: controller, child: Text('Tap me'), ), ),Now:
final controller = FlyoutController(); FlyoutTarget( controller: controller, child: Button( onPressed: _showFlyout, child: Text('Tap me'), ), ), void _showFlyout() async { await controller.showFlyout( barrierDismissible: ..., dismissWithEsc: ..., // NEW dismissOnPointerMoveAway: ..., // NEW placementMode: ..., autoModeConfiguration: ..., // NEW forceAvailableSpace: ..., // NEW shouldConstrainToRootBounds: ..., // NEW additionalOffset: ..., margin: ..., // NEW barrierColor: ..., navigatorKey: ..., // NEW transitionBuilder: ..., // NEW transitionDuration: ..., // NEW builder: (context) => FlyoutContent(...), ); }
Now, it's possible to dismiss the flyout by tapping the barrier (
barrierDismissible), pressing theESCkeyboard key (dismissWithEsc) and by moving the cursor (pointer) away from the flyout (dismissOnPointerMoveAway- defaults to false);Automatic mode is finally implemented, and it's the default mode. By setting
autoModeConfiguration, it's possible to customize the preferred flyout placement. If flyout doesn't meet the placement conditions, it decides where it fits the best.forceAvailableSpacedetermines whether the flyout size should be forced the available space according to the attached target. It's useful when the flyout is large but can not be on top of the target.NavigationView's top navigation mode now uses it by default on pane items overflow.shouldConstrainToRootBoundsdetermines whether the flyout should fit the root bounds - usually the window bounds. If false, the flyout will be able to overflow the screen on all sides. Defaults totruemargindetermines the margin of the flyout to the root.additionalOffsetdetermines the margin of the flyout to the target.It's now possible to assign a custom transition to the flyout by providing
transitionBuilderandtransitionDuration. By default, a light slide-fade transition is used, but it can be highly customizable to fit your needs. It provides the current placement mode - since automatic mode may change it at layout time.DropdownButtonuses it to create its slidethrough transition.positionandplacementwere replaced byplacementMode, which gives horizontal and vertical options of placement, at all screen alignments. It's also possible to use it in a right-to-left context by usingplacementMode.resolve(Directionality.of(context))Use
positionto display the flyout anywhere in the screen. It's useful to create context menus -
Added support for Flutter 3.7 (#568)
-
Added
TextBox.magnifierConfiguration,TextBox.spellCheckConfigurationandTextBox.onTapOutside
-
-
4.1.520 Jan 2023Release notes
Open source →- Add
AutoSuggestBox.maxPopupHeight(#677) - Fix assertion in
NavigationViewStateif no pane was currently selected (#678) - Make
NavigationView.paneBodyBuilderresponsible for state management of the widget it returns, allowingpaneBodyBuilderto return anIndexedStack(common use case) (#679) - Added support for Belarusian language (#686)
- Added missing German translation for
minute,hour,day,month, andyear
- Add
-
4.1.413 Jan 2023Release notes
Open source →- Avoid overflow in
DatePickerandTimePickerpopup (#663) - Ensure sticky indicator is mounted before updating (#670)
- Date and Time pickers popup are now positioned correctly in RTL mode (#675)
- It's now possible to navigate through
AutoSuggestBoxitems by long pressing arrow up and down keys - Do not clear focus scope after selecting an item in
AutoSuggestBox(#671) AutoSuggestBox'strailingIconnow comes after the close button- MINOR BREAK
TextBox.clearGlobalKeywas removed, since it was not used - Add
AutoSuggestBox.unfocusedColorandTextFormBox.unfocusedColor - Implement
displayInfoBar, which shows an info bar as an overlay (#673) - Implement
ThemeData.extensions(#674)
- Avoid overflow in
-
4.1.329 Dec 2022 -
4.1.212 Dec 2022 -
4.1.108 Dec 2022Release notes
Open source →- Ensure acrylic is updated only if it's mounted (#634)
- Ensure the provided
startYearandendYearinDateTimeare used properly (#627) - Fix left arrow key not moving to parent item on collapsed
TreeViewItem(#632) - Added
NavigationPane.scrollBehavior(#640) - Added
CommandBarCard.borderRadius(#641) - Ensure combobox scroll controller has a client attached before using it (#620)
- Correctly use
TextFormBox.initialValue - Added
TreeViewState.toggleItem, which toggles the item expanded state (#493) - Ensure
NavigationViewpane items are brought into view when selected
-
4.1.026 Nov 2022Release notes
Open source →- Fixed
TreeViewselection state behavior for items that are not expanded (#578) - Added support for Romanian language (#602)
- Ensure the body state in
NavigationViewis properly preserved (#607) - BREAKING Renamed
ExpanderState.opentoExpanderState.isExpanded - The same identifier is no longer used for every
Expander(#596) - Ensure the TabView scroll controller has clients before using it (#615)
- TabView now waits a time to resize after closed (#617)
ToggleButtonborder width is uniform (#610)
- Fixed
-
4.0.322 Oct 2022 -
4.0.3+103 Nov 2022 -
4.0.213 Oct 2022Release notes
Open source →- Add
NavigationView.paneBodyBuilderfor customization of widget built for body of pane. (#548) - Fixed
NavigationAppBarunnecessary leading icon when no pane is provided inNavigationView(#551) - Added
NavigationView.minimalPaneOpenand, with it, the possibility to open minimal pane programatically (#564) - Assign an index to pane item expanders (#566)
- Update
NavigationViewcompact mode transition TreeViewupdates (#555):- BREAKING Added
TreeViewItemInvokeReasonparameter toTreeView.onItemInvokedandTreeViewItem.onInvoked. - Fix clearing out selection state on initial state build in certain cases for a single selection mode tree view.
- Fix single selection mode to properly deselect hidden child items when selecting a collapsed parent item.
- Add
TreeView.includePartiallySelectedItemsso that items who have children with a mixed selection state will be included in theonSelectionChangedcallback. - Add
TreeView.deselectParentWhenChildrenDeselectedoptional behavior so that parent items can remain selected when all of their children are deselected. - Add
TreeViewItem.setSelectionStateForMultiSelectionModehelper method and[TreeViewItem].selectedItemsextension method, to make it easier for application code to programmatically change selection state of items in a multi-selection mode tree view.
- BREAKING Added
- Added support for Uzbek language
- Add
-
4.0.127 Sep 2022Release notes
Open source →PaneItemAction.bodyis no longer required (#545)- Added
DropDownButton.onOpenandDropDownButton.onClosecallbacks (#537) - Ensure
MenuFlyoutItem.onPressedis called after the flyout is closed ifDropDownButton.closeAfterClickis true (#520) - Ensure the
TimePickerandDatePickerpopups will fit if the screen is small (#544) - Do not apply padding to
NavigationAppBar.leading(#539) - Added
AutoSuggestBox.noResultsFoundBuilder(#542) - Added
AutoSuggestBox.inputFormatters(#542) - Added support for Hebrew language
-
4.0.025 Sep 2022Release notes
Open source →-
BREAKING Removed
NavigationBody. UsePaneItem.bodyinstead (#510/#531): Before:NavigationView( pane: NavigationPane( items: [ PaneItem(icon: WindowsIcon(WindowsIcons.add)), PaneItem(icon: WindowsIcon(WindowsIcons.add)), PaneItem(icon: WindowsIcon(WindowsIcons.add)), ], ), content: NavigationBody( children: [ _Item1(), _Item2(), _Item3(), ], ), ),Now:
NavigationView( ... pane: NavigationPane( items: [ PaneItem( icon: WindowsIcon(WindowsIcons.add), body: _Item1(), ), PaneItem( icon: WindowsIcon(WindowsIcons.add), body: _Item2(), ), PaneItem( icon: WindowsIcon(WindowsIcons.add), body: _Item3(), ), ], ), ),Or if you don't have a pane, you can use the content like the following:
NavigationView( content: ScaffoldPage( header: PageHeader( title: titleRow, ), content: child, ), ),either one attribute of pane or content must not be null
Use
NavigationView.transitionsBuilderto create custom transitions -
Added
PaneItem.onTap(#533) -
Compact pane is no longer toggled when item is selected (#533). To toggle it programatically, use
NavigationViewState.toggleCompactOpenModewhen an item is tapped -
Dynamic header height for open pane (#530)
-
Fixes memory leaks on
NavigationView -
TreeViewupdates:-
All items of the same depth level now have the same indentation. Before, only items with the same parent were aligned.
-
The hitbox for the expand icon of each item now uses the item's full height and is three times wider than the actual icon. This corresponds to the implementation in the explorer of Windows 10/11.
-
You can now choose whether the items of a TreeView should use narrow or wide spacing.
-
Do not invoke the tree view item on secondary tap (#526)
-
BREAKING
TreeView.onSecondaryTapis now a(TreeViewItem item, TapDownDetails details)callback: Before:TreeView( ..., onSecondaryTap: (item, offset) async {} ),Now:
TreeView( ..., onSecondaryTap: (item, details) { final offset = details.globalPosition; }, ) -
Expand/collape items with right and left arrow keys, respectively (#517)
-
Added
TreeView.onItemExpandToggleandTreeViewItem.onExpandToggle(#522)
-
-
BREAKING
AutoSuggestBoxdynamic type support (#441):Before:
AutoSuggestBox( items: cats.map((cat) { return AutoSuggestBoxItem( value: cat, onFocusChange: (focused) { if (focused) debugPrint('Focused $cat'); } ); }).toList(), onSelected: (item) { setState(() => selected = item); }, ),Now:
AutoSuggestBox<String>( items: cats.map((cat) { return AutoSuggestBoxItem<String>( value: cat, label: cat, onFocusChange: (focused) { if (focused) debugPrint('Focused \$cat'); } ); }).toList(), onSelected: (item) { setState(() => selected = item); }, ),
-
-
4.0.0-pre.402 Sep 2022 pre-releaseRelease notes
Open source →DisableAcrylicnow fully disable transparency of its decendentsAcrylics (#468)- Do not interpolate between infinite constraints on
TabView(#430) - Do not rebuild the
TimePickerpopup when already rebuilding (#437) ToggleSwitchupdates:- Added
TextChangedReason.cleared, which is called when the text is cleared by the user in anAutoSuggestBox(#461) - Call
AutoSuggestBox.onChangedwhen an item is selected using the keyboard (#483) Tooltipoverlay is now ignored when hovered (#443)- Do not add unnecessary padding in
DropdownButton(#475) ComboBoxupdates:- BREAKING Renamed
ComboboxtoComboBox - BREAKING Renamed
ComboboxItemtoComboBoxItem - BREAKING Renamed
ComboBox.backgroundColortoComboBox.popupColor - Implement
EditableComboBox, a combo box that accepts items that aren't listed (#244) ComboBox.isExpanded: falsenow correctly sets the button width (#382)ComboBox's items height are correctly calculated, as well as initial scroll offset (#472)- BREAKING
ComboBox.disabledHintwas renamed toComboBox.disabledPlaceholder - Added
ComboBoxFormFieldandEditableComboBoxFormField(#373) ComboBox.comboBoxColoris now correctly applied (#468)ComboBoxpopup can't be opened if disabled
- BREAKING Renamed
- Implemented
PaneItemExpander(#299) TimePickerandDatePickerpopup now needs a minimum width of 260 (#494)- Correctly align
NavigationAppBarcontent (#494) - BREAKING Added
InfoLabel.rich.InfoLabelis no longer a constant contructor (#494) - Always add
GlobalMaterialLocalizationsaboveReorderableListView(#492) - BREAKING Removed
ContentDialog.backgroundDismiss. UseshowDialog.barrierDismissable(#490) - Reviewed focus (#496)
DatePickerandTimePickernow show the focus highlight. Their popup now can be controlled using the keyboardNavigationBodynow uses aFocusTraversalGroupto handle focus This means the the content of the body will be fully traversed before moving on to another widget or group of widgets. Learn moreTreeViewItemnow shows the focus highlight. They can also be selected using the keyboardExpandernow shows the focus highlight
- Progress Indicators velocity is no longer affected by device frame rate (#502)
- Added
AutoSuggestBox.enabled(#504) - Correctly keep the
NavigationViewanimation state (cf0fae1 ,bd89ba6) - Calculate
selectedfor all parents as soon as theTreeViewis built
-
4.0.0-pre.313 Aug 2022 pre-releaseRelease notes
Open source →-
NavigationViewmode fixes:- When top overflow menu is opened,
PaneItemHeaderno longer throws an unsupported error - When on top mode,
PaneItemHeaderis properly aligned to the other items. - Added
NavigationPaneThemeData.headerPadding, which is applied toPaneItemHeaderon open, compact and minimal mode. It defaults to 10 pixels at the top - BREAKING
PaneItem.getPropertyFromTitleis nowwidget.getProperty:
Before:
getPropertyFromTitle<TextStyle>()Now:
title.getProperty<TextStyle>()This was changed because the properties of
PaneItemHeaderneeded to be accessed, but the old version only supported to get the properties ofPaneItem.title. It can be called on aText,RichTextor in anIconwidgetInheritedNavigationViewis now accessible on the top overflow menu- Added
NavigationPaneThemeData.selectedTopTextStyleandNavigationPaneThemeData.unselectedTopTextStyle, which is applied to the items on top mode - Fixed
contentfocus on minimal mode - Updated default transitions for top mode:
HorizontalSlidePageTransition
- When top overflow menu is opened,
-
Fix incorrect translation of
TimePickerin Traditional Chinese. -
Added
ScaffoldPage.resizeToAvoidBottomInset(#444) -
Consider view padding for
NavigationAppBar -
Scrollbarupdates (#356):- Correctly use
backgroundColorto display the track color - Added
paddingandhoveringPadding - Check if animation is disposed before using it (#446)
- Correctly use
-
Update
AutoSuggestBox(#450):- Added
.enableKeyboardControls. When true, items can be selected using the keyboard (#19) - Added
.sorter, which lets you set a custom sort function for the suggestions.AutoSuggestBox.defaultItemSorteris used by default - Overlay's height is now correctly calculated based on the screen size. It no longer overlaps the screen.
viewPaddingis also taken into consideration - Close the overlay if the textbox width is changes (#456)
.itemscan be dynamically loaded (#387)- BREAKING
.itemsis now aList<AutoSuggestBoxItem>: Before:
AutoSuggestBox( items: [ 'Cat', 'Dog', 'Bird', 'Horse', ], ... ),Now:
AutoSuggestBox( items: [ 'Cat', 'Dog', 'Bird', 'Horse', ].map((animal) { return AutoSuggestBoxItem( value: animal, // this takes a String child: Text('Animal $animal'), // this takes a Widget. If null, value is displayed as a text onFocusChange: (focused) { // this is called when the item is focused using the keyboard arrow keys if (focused) debugPrint('Focused animal $animal'); }, onSelected: () { // this is called when the item is selected debugPrint('Selected animal $animal'); } ); }).toList(), ... ) - Added
-
Comboboxupdates (#454): -
Correctly check if a locale is supported (#455)
-
-
4.0.0-pre.223 Jul 2022 pre-releaseRelease notes
Open source →-
Remove whitespace on
ContentDialogif title is omitted (#418) -
Apply correct color to the Date and Time Pickers button when selected (#415, #417)
-
Expose more useful properties to
AutoSuggestBox(#419) -
BREAKING
PopupContentSizeInfowas renamed toContentSizeInfo -
Reworked
ListTile(#422):- BREAKING Removed
TappableListTile - Added support for single and multiple selection. Use
ListTile.selectable(#409) - Added focus support
- Use the Win UI design
- BREAKING Removed
-
Reviewed animation durations (#421)
- BREAKING Removed
.animationDurationand.animationCurvefromScrollbarThemeData - Added
expandContractAnimationDurationandcontractDelaytoScrollbarThemeData
- BREAKING Removed
-
NavigationPaneSizeconstraints are now correctly applied when in open mode (#336) -
NavigationIndicatorcan't be invisble anymore when animation is stale (#335) -
Updated
TabView:-
BREAKING Removed
TabView.bodies. Now,Tab.bodyis used. BeforeTabView( tabs: [ Tab(text: Text('Tab 1')), Tab(text: Text('Tab 2')), ], bodies: [ Tab1Body(), Tab2Body(), ], ),Now:
TabView( tabs: [ Tab( text: Text('Tab 1'), body: Tab1Body(), ), Tab( text: Text('Tab 2'), body: Tab2Body(), ), ], ), -
Updated
TabViewtabs' constraints and padding -
Fixed tab width when
TabWidthBehavioriscompact -
FlutterLogois no longer the default tab Icon
-
-
DropDownButtonmenu is now sized correctly according to the screen size -
If there isn't enough space to display the menu on the preferred position,
Flyoutwill display on the opposite position (#435)
-
-
4.0.0-pre.130 Jun 2022 pre-releaseRelease notes
Open source →-
Exposed private properties that makes it easier to create custom panes for
NavigationView(#365):kCompactNavigationPaneWidthkOpenNavigationPaneWidthNavigationPane.changeToPaneItem.getPropertyFromTitle
-
PaneScrollConfigurationis now applied to custom pane onNavigationView -
Added
NavigationViewState.displayMode. It results in the current display mode used by the view, including the automatic display mode (#360):// Define the key final key = GlobalKey<NavigationViewState>(); NavigationView( // pass the key to the view key: key, ..., ) // Get the current display mode. Note that, in order to find out the automatic display mode, // the widget must have been built at least once final PaneDisplayMode currentDisplayMode = key.currentState.displayMode; -
The app bar action no longer overflow when minimal pane/compact overlay is open (#361)
-
Update
AutoSuggestBox:- It now uses
Acrylic, but it can be disabled usingDisableAcrylic TextChangedReason.suggestionChoosenis now called properly
- It now uses
-
Updated
TextBox:TextBoxcolors were updated to match the Win 11 design.- Fluent Text Selection Control now make use of
Acrylic. Its items were also updated
-
Updated pickers (#406):
- If
selectedis null, a placeholder text is shown (#306) - Added new localization messages:
hour,minute,AM,PM,month,dayandyear. - BREAKING Removed
.hourPlaceholder,.minutePlaceholder,.amText,.pmTextfromTimePicker. It was replaced, respectivelly, by thehour,minute,AM,PMlocalization messages - On
DatePicker, it's now possible to change the order of the fields:
DatePicker( ..., fieldOrder: [ DatePickerField.day, DatePickerField.month, DatePickerField.year, ], )The fields are ordered based on the current locale by default
- On
DatePicker, the day and year fields are now formatted based on the current locale (getDateOrderFromLocale)
- If
-
Update
Slider(#405):- Added
.thumbRadiusand.trackHeighttoSliderThemeData - The active track now isn't taller than the inactive track
- Added
-
-
4.0.0-pre.010 Jun 2022 pre-releaseRelease notes
Open source →-
Show menu button on automatic minimal display mode (#350)
-
BREAKING
Map<ShortcutActivator, Intent>?is now the typed used onFluentApp.shortcuts(#351) -
TextBoxreview (#352):- Added
.initialValue,.selectionControls,.mouseCursor,.textDirection,.scribbleEnabledand.enableIMEPersonalizedLearningtoTextBox - Added
AutoFillClienttoTextBox - Added
UnmanagedRestorationScopetoTextFormBox
- Added
-
Added
AutoSuggestBox.form, that usesTextFormBoxinstead ofTextBox(#353) -
Do not overflow when text is too long on
Chip(#322) -
Add RTL support for
Chip -
Cardupdates:- Updated card's background colors
- BREAKING Removed
Card.elevation - Added
Card.margin, which is the margin around the card
-
Updated
ComboboxandButtondesigns -
Updated
NavigationPanebehaviour. Now, if the header is null, the space it should have taken will be removed from the pane (display mode affected: minimal, open only) (#359) -
Reviewed
DatePickerandTimePicker(#357)- Correctly apply dimensions and positions to both pickers
- Update the picker popup style and behavior
-
Colors Update (#368):
-
Added
ResourceDictionary, which provides default colors to be used on components -
(forms) Updated
Comboboxstyle. It now usesAcrylicon the combobox popup menu -
(buttons) Updated
Button,FilledButton,IconButtonandTextButtonstyles -
(toggleable inputs) Updated
Checkbox,Chip,RadioButton,RatingBar,ToggleButtonandToggleSwitch-
BREAKING Updated
Slider:SliderThemeData.thumbColor,SliderThemeData.activeColorandSliderThemeData.inactiveColornow are of typeButtonState<Color?>?, which handles the button color on different states.SliderThemeData.disabledThumbColor,SliderThemeData.disabledActiveColorandSliderThemeData.disabledInactiveColorwere removed- Before:
SliderThemeData( thumbColor: Colors.green, ),- Now:
SliderThemeData( // Apply Colors.green for all button states. Instead you can use ButtonState.resolveWith to use different values according to the current state thumbColor: ButtonState.all(Colors.green), ),
-
-
(navigation) Updated
NavigationView,PaneItemandScaffoldPage- Updated
TabViewand its tabs styles. AFocusBorderis now used to display the focus highlight of the tabs - All combinations of
BorderRadiuscan now be used onFocusBorder
- Updated
-
(surfaces) Updated
Card,ContentDialog,InfoBar,Expander,Flyoutand `Divider``- Added
InfoBar.isIconVisible
- Added
-
(indicators) Updated
ProgressBar,ProgressRingandInfoBadge -
(other) Added helper methods for
AccentColor:AccentColor.defaultBrushFor,AccentColor.secondaryBrushForandAccentColor.tertiaryBrushFor -
Polish translation added
-
-
-
3.12.013 May 2022