Skip to content

Releases: bdlukaa/fluent_ui

v4.15.0 - TreeView, Visual Density and bug fixes

06 Mar 11:57

Choose a tag to compare

  • fix: MenuFlyout no longer throws TypeError on sub-items (#1337)
  • feat: Controls now respond to VisualDensity from FluentThemeData for compact sizing. Use FluentThemeData(visualDensity: VisualDensity.compact) to enable compact mode (#1175)
  • fix: NavigationView no longer throws BoxConstraints has a negative minimum height when header and menu button are both absent (#1334)
  • fix: ProgressBar chooses 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, CalendarDatePicker popups (#1321, #1286)
  • BREAKING feat: Rename RatingBar to RatingControl, and updated its style (#1274)
  • fix: NumberBox compact overlay is now positioned correctly on right-to-left directionality (#1326)
  • BREAKING feat: Add TreeViewController for programmatic control of TreeView (#1140)
    • TreeViewController provides 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.children is now unmodifiable. Use TreeViewController methods (addItem(), addItems(), removeItem(), moveItem()) to modify tree structure.
  • feat: TitleBar now supports double-click callback to maximize or restore the window (#1298)
  • fix: Correctly apply TitleBar's isBackButtonEnabled (#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

21 Feb 19:27

Choose a tag to compare

  • refactor: Consistent theme classes

  • fix: CalendarDatePicker throws 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: NumberBox calls onChanged() 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 NumberBox increment and decrement buttons. Added NumberBox.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 EdgeInsetsDirectional instead of EdgeInsets

  • BREAKING CHANGE refactor: Remove BottomNavigationBar and all its related widgets

  • MINOR BREAKING refactor: Remove Brightness.isLight, Brightness.isDark and Brightness.opposite extension methods. Use switch statements 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 setState and frames scheduling in several widgets.

  • BREAKING CHANGE NavigationView reworked to be more flexible and match the Windows UI 3 specs.

    • Renamed PaneDisplayMode.open to PaneDisplayMode.expanded.
    • Renamed appBar to titleBar.
    • Removed NavigationAppBar class. Any widget can now be a title bar.
    • Introduced the TitleBar widget, which matches the design and functionality of a Window title bar.
    • Added PaneBackButton widget, a button that allows the user to pop the current route.
    • Added PaneToggleButton widget, 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 StickyNavigationIndicator animation to match Win UI 3 specs (#540)
    • Updated colors and margins to match Win UI 3 specs (#1181)
    • PaneItemExpander now supports deep nesting (#1019)
    • PaneItemExpander no longer resets itself when the tree is updated. (#876)
    • PaneItemExpander doesn'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 NavigationView important data using NavigationView.dataOf(context)
    • Added NavigationPane.acrylicDisabled, which allows disabling acrylic material effect of the pane overlays
    • InfoBadge style variants (success, attention, critical), dot badges and adaptive sizing (#1277)
    • NavigationView holds a local history. Use NavigationView.of(context).pop() or PaneBackButton to navigate to the previous index (#1266)
  • chore: Updated Russian translations (#1253)

  • Update Chinese translations (#1283)

  • BREAKING CHANGE RadioButton API reworked to use RadioGroup for state management.

    • Removed checked and onChanged parameters from RadioButton.
    • Added required value parameter to RadioButton<T>.
    • Radio buttons must now be wrapped in a RadioGroup<T>, which holds groupValue and onChanged.
    • 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')),
        ],
      ),
    )
  • fix: Flyout barrier color (#1276)

v4.10.0 - Flutter 3.27

13 Dec 18:12
1306c53

Choose a tag to compare

  • fix: Add missing properties (closeIconSize, closeButtonStyle) in debugFillProperties and InfoBarThemeData.merge (#1128

  • feat: Add TabView.reservedStripWidth, which adds a minimum empty area between the tabs and the tab view footer (#1106)]

  • fix: Correctly unfocus NumberBox when user taps outside (#1135)

  • fix: Do try to scroll Date and Time at build time (#1117)

  • feat: Use a Decoration instead of Color in NavigationAppBar (#1118)

  • feat: Add EditableComboBox.inputFormatters (#1041)

  • BREAKING feat: TextBox.decoration and TextBox.foregroundDecoration are now of type WidgetStateProperty (#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: TimePicker hour offset

  • feat: Add ColorPicker (#1152)

  • fix: NumberBox initial value formatting (#1153)

  • fix: NumberBox incrementing/decrementing when not focused (#1124)

  • fix: NumberBox text is correctly when there are no visible actions (#1150)

What's Changed

New Contributors

Full Changelog: v4.9.2...v4.10.0

v4.9.2

09 Oct 11:41

Choose a tag to compare

  • feat: NavigationAppBar.leading now has a minimum width of kCompactNavigationPaneWidth instead of being fixed to this width (#1103)
  • feat: Add TabView.stripBuilder (#1106)
  • fix: Correctly apply EditableComboBox.style (#1121)
  • feat: Add BreadcrumbBar.chevronIconBuilder and BreadcrumbBar.chevronIconSize (#1111)
  • fix: Consider object translation on Menu Flyouts (#1104)
  • fix: Correctly disable DropDownButton items if onPressed is not provided (#1116)
  • feat: Add ToggleMenuFlyoutItem and RadioMenuFlyoutItem (#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

Full Changelog: v4.9.1...v4.9.2

v4.9.1 - Flutter 3.24

09 Aug 11:57

Choose a tag to compare

  • feat: ΒΉ NumberBox now supports precision greater than 4. Β² Add NumberBox.pattern, NumberBox.formatter, NumberBox.format (#1080)
  • fix: Resolved issue where PaneItem within PaneItemExpander remained accessible in NavigationPane compact mode (#1081)
  • fix: Correct number of days on DatePicker popup (#1049)
  • feat: Create PaneItemWidgetAdapter (#1087)
  • feat: Add maxWidth to TooltipThemeData for optional wrapping of long tooltips (#1094)
  • fix: Fixed compile errors with Flutter 3.24.0 stable (#1097)

What's Changed

  • Fix: PaneItem Behavior 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

Full Changelog: v4.9.0...v4.9.1

4.9.0

30 Jun 13:09

Choose a tag to compare

  • fix: ΒΉ DropDownButton.closeAfterClick is now correctly applied. Β² Added MenuFlyoutItem.closeAfterClick, which defaults to true. (#1016)

  • fix: MenuFlyoutSubItem does not close when pressed (#1037)

  • fix: Make ScaffoldPage opaque (#1048)

  • fix: Scroll issue in DatePicker. (#1054)

  • feat: Add NumberBox.textInputAction and NumberBox.onEditingComplete (#1063)

  • fix: NumberBox does not calls a rebuild when it is already building (#1064)

  • feat: Add Tab.color, Tab.selectedColor and Tab.outlineColor to TabView (#1068)

  • feat: Added NavigationView.onItemPressed callback, called when the item is on tap (#1067)

  • fix: Mark MenuFlyoutItem as disabled when .onPressed is null (#1074)

  • BREAKING feat: Removed ButtonState, ButtonStates and their related classes. Use WidgetStateProperty, WidgetState instead. (#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 Tab a widget that can be overridable (#1050)
    To create a custom Tab, you can now extend Tab:

    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 TabState reference to see all the available methods you can override.

  • feat: Deprecate TabView.addIconData and TabView.addIconBuilder. Use TabView.newTabIcon instead.

  • fix: TabView.closeDelayDuration default value is now 1 second.

New Contributors

Full Changelog: v4.8.0...v4.9.0

v4.8.0 - Bye deprecated

25 Nov 18:34

Choose a tag to compare

What's Changed

  • Correctly paint buttons borders (#956)

  • MINOR BREAKING Removed ButtonStyle.border. Use ButtonStyle.shape instead:
    Before:

    Button(
      style: ButtonStyle(
        border: ButtonState.all(BorderSide(...)),
      ),
    ),

    Now:

    Button(
      style: ButtonStyle(
        shape: ButtonState.all(RoundedRectangleBorder(...)),
      ),
    ),
  • BREAKING Removed Chip and its related widgets.

  • BREAKING Removed PillButtonBar and its related widgets. Use CommandBar instead.

  • BREAKING Removed SplitButtonBar. Use SplitButton instead.

  • BREAKING Removed BottomSheet and its related widgets and functions.

  • BREAKING Removed Snackbar, showSnackbar and their related widgets. Use InfoBar and displayInfoBar instead.

  • fix: do not close InfoBar twice (#955)

  • feat: add Kurdish locale (#962)

  • fix: review debugFillProperties on widgets (#974)

  • fix: Date and Time pickers when localization is not English (#961)

New Contributors

Full Changelog: v4.7.7...v4.8.0

v4.7.7

30 Oct 15:07

Choose a tag to compare

What's Changed

  • fix: ProgressRing and ProgressBar now fit correctly the parent bounds (#942)
  • fix: TabView buttons was only rendered on hover. Now the buttons (add and scroll buttons) are always rendered.
  • fix: ComboboxItem correctly apply foreground color. Added ComboboxItem.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_pos dependecy 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

08 Oct 13:15

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v4.7.4...v4.7.6

Bug fixes

15 Sep 12:02

Choose a tag to compare

  • fix: tap on DatePicker day does not skip a day (#914)
  • fix: ensure PaneItemExpander's flyout is attached before using it (#857)
  • fix: expose more TextField properties on NumberBox (#933)
  • fix: expose more TextField properties on PasswordBox (#925)
  • fix: AutoSuggestBox.onOverlayVisibilityChanged now results in the correct state (#926)
  • fix: MenuFlyoutSubItem inherits the acrylic data from MenuFlyout (#932)
  • fix: MenuFlyoutSubItem inhertis its MenuFlyout parent decoration data (#931)
  • feat: Expose paneNavigationButtonIcon on NavigationPaneThemeData (#929)