Releases: bdlukaa/fluent_ui
v4.15.0 - TreeView, Visual Density and bug fixes
- 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
Navigation view rework, Flutter 3.41
-
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. -
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)
v4.10.0 - Flutter 3.27
-
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
v4.9.2
- 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
v4.9.1 - Flutter 3.24
- 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
4.9.0
-
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
v4.8.0 - Bye deprecated
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
v4.7.7
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
v4.7.6
What's Changed
- Fixes leading/trailing widgets not centered in listTile by @milindgoel15 in #940
New Contributors
- @milindgoel15 made their first contribution in #940
Full Changelog: v4.7.4...v4.7.6
Bug fixes
- 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)