Fluent Ui Versions Save

Implements Microsoft's WinUI3 in Flutter.

v4.2.0

1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.1.4...v4.2.0

v4.1.4

1 year ago

What's Changed

  • FlyoutListTile can be used outside of a flyout (#650)
  • Add uk localization (#647)
  • Add swedish localization (#655)
  • Add key parameter to NavigationPaneItem and all its instances (#656)
  • Ensure fontFamily is inherit in some widgets (654)
  • Add Flyout.navigatorKey (#538)
  • Add Card.borderColor (#643)
  • Avoid overflow in DatePicker and TimePicker popup (#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 AutoSuggestBox items by long pressing arrow up and down keys
  • Do not clear focus scope after selecting an item in AutoSuggestBox (#671)
  • AutoSuggestBox's trailingIcon now comes after the close button
  • MINOR BREAK TextBox.clearGlobalKey was remove, since it was not used
  • Add AutoSuggestBox.unfocusedColor and TextFormBox.unfocusedColor
  • Implement displayInfoBar, which shows an info bar as an overlay (#673)
  • Implement ThemeData.extensions (#674)

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.1.2...v4.1.4

v4.1.2

1 year ago
  • PageHeader now gives appropriate bounds to its commandBar (#642)
  • Ensure NavigationView body state is not lost when resizing window
  • Ensure TabView' tabs' state are not lost when changing selected tab (#607)
  • Do not block text field tap (#343)
  • Do not duplicate trailing in FlyoutContent (#487)

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.1.1...v4.1.2

v4.1.1

1 year ago
  • Ensure acrylic is updated only if it's mounted (#634)
  • Ensure the provided startYear and endYear in DateTime are 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 NavigationView pane items are brought into view when selected
  • Fixed TreeView selection state behavior for items that are not expanded (#578)
  • Added support for Romanian language (#602)
  • Ensure the body state in NavigationView is properly preserved (#607)
  • BREAKING Renamed ExpanderState.open to ExpanderState.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)
  • ToggleButton border width is uniform (#610)

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.0.3...v4.1.1

v4.0.3

1 year ago
  • NavigationView scrollbar can now be dragged (#472)
  • PaneItemHeader can now be used inside a PaneItemExpander (#575)
  • InfoBadge no longer overflows when transitioning from compact mode to open mode in NavigationView (#588)

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.0.2...v4.0.3

v4.0.2

1 year ago
  • Add NavigationView.paneBodyBuilder for customization of widget built for body of pane. (#548)
  • Fixed NavigationAppBar unnecessary leading icon when no pane is provided in NavigationView (#551)
  • Added NavigationView.minimalPaneOpen and, with it, the possibility to open minimal pane programatically (#564)
  • Assign an index to pane item expanders (#566)
  • Update NavigationView compact mode transition
  • TreeView updates (#555):
    • BREAKING Added TreeViewItemInvokeReason parameter to TreeView.onItemInvoked and TreeViewItem.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.includePartiallySelectedItems so that items who have children with a mixed selection state will be included in the onSelectionChanged callback.
    • Add TreeView.deselectParentWhenChildrenDeselected optional behavior so that parent items can remain selected when all of their children are deselected.
    • Add TreeViewItem.setSelectionStateForMultiSelectionMode helper method and [TreeViewItem].selectedItems extension method, to make it easier for application code to programmatically change selection state of items in a multi-selection mode tree view.
  • Added support for Uzbek language

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.0.1...v4.0.2

v4.0.1

1 year ago
  • PaneItemAction.body is no longer required (#545)
  • Added DropDownButton.onOpen and DropDownButton.onClose callbacks (#537)
  • Ensure MenuFlyoutItem.onPressed is called after the flyout is closed if DropDownButton.closeAfterClick is true (#520)
  • Ensure the TimePicker and DatePicker popups will fit if the screen is small (#544)
  • Do not apply padding to NavigationAppBar.leading (#539)
  • Added AutoSuggestBox.noResultsFoundBuilder (#542)
  • Added AutoSuggestBox.inputFormatters (#542)

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.0.0...v4.0.1

v4.0.0

1 year ago
  • BREAKING Removed NavigationBody. Use PaneItem.body instead (#510/#531):
    Before:

    NavigationView(
      pane: NavigationPane(
        items: [
          PaneItem(icon: Icon(FluentIcons.add)),
          PaneItem(icon: Icon(FluentIcons.add)),
          PaneItem(icon: Icon(FluentIcons.add)),
        ],
      ),
      content: NavigationBody(
        children: [
          _Item1(),
          _Item2(),
          _Item3(),
        ],
      ),
    ),
    

    Now:

    NavigationView(
      ...
      pane: NavigationPane(
        items: [
          PaneItem(
            icon: Icon(FluentIcons.add),
            body: _Item1(),
          ),
          PaneItem(
            icon: Icon(FluentIcons.add),
            body: _Item2(),
          ),
          PaneItem(
            icon: Icon(FluentIcons.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.transitionsBuilder to create custom transitions

  • Added PaneItem.onTap (#533)

  • BREAKING AutoSuggestBox dynamic 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);
      },
    ),
    
  • Compact pane is no longer toggled when item is selected (#533). To toggle it programatically, use NavigationViewState.toggleCompactOpenMode when an item is tapped

  • Dynamic header height for open pane (#530)

  • Fixes memory leaks on NavigationView

  • TreeView updates:

    • 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.onSecondaryTap is 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.onItemExpandToggle and TreeViewItem.onExpandToggle (#522)

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v3.12.0...v4.0.0

v4.0.0-pre.4

1 year ago
  • DisableAcrylic now fully disable transparency of its decendents Acrylics (#468)
  • Do not interpolate between infinite constraints on TabView (#430)
  • Do not rebuild the TimePicker popup when already rebuilding (#437)
  • ToggleSwitch updates:
    • Use the correct color for DefaultToggleSwitchThumb (#463)
    • Added ToggleSwitch.leadingContent, which positions the content before the switch (#464)
    • Added ToggleSwitch.thumbBuilder, which builds the thumb based on the current state
  • Added TextChangedReason.cleared, which is called when the text is cleared by the user in an AutoSuggestBox (#461)
  • Call AutoSuggestBox.onChanged when an item is selected using the keyboard (#483)
  • Tooltip overlay is now ignored when hovered (#443)
  • Do not add unnecessary padding in DropdownButton (#475)
  • ComboBox updates:
    • BREAKING Renamed Combobox to ComboBox
    • BREAKING Renamed ComboboxItem to ComboBoxItem
    • BREAKING Renamed ComboBox.backgroundColor to ComboBox.popupColor
    • Implement EditableComboBox, a combo box that accepts items that aren't listed (#244)
    • ComboBox.isExpanded: false now correctly sets the button width (#382)
    • ComboBox's items height are correctly calculated, as well as initial scroll offset (#472)
    • BREAKING ComboBox.disabledHint was renamed to ComboBox.disabledPlaceholder
    • Added ComboBoxFormField and EditableComboBoxFormField (#373)
    • ComboBox.comboBoxColor is now correctly applied (#468)
    • ComboBox popup can't be opened if disabled
  • Implemented PaneItemExpander (#299)
  • TimePicker and DatePicker popup now needs a minimum width of 260 (#494)
  • Correctly align NavigationAppBar content (#494)
  • BREAKING Added InfoLabel.rich. InfoLabel is no longer a constant contructor (#494)
  • Always add GlobalMaterialLocalizations above ReorderableListView (#492)
  • BREAKING Removed ContentDialog.backgroundDismiss. Use showDialog.barrierDismissable (#490)
  • Reviewed focus (#496)
    • DatePicker and TimePicker now show the focus highlight. Their popup now can be controlled using the keyboard
    • NavigationBody now uses a FocusTraversalGroup to 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 more
    • TreeViewItem now shows the focus highlight. They can also be selected using the keyboard
    • Expander now shows the focus highlight
  • Progress Indicators velocity is no longer affected by device frame rate (#502)
  • Added AutoSuggestBox.enabled (#504)
  • Correctly keep the NavigationView animation state (cf0fae1 ,bd89ba6)
  • Calculate selected for all parents as soon as the TreeView is built

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v4.0.0-pre.3...v4.0.0-pre.4

v4.0.0-pre.3

1 year ago
  • NavigationView mode fixes:

    • When top overflow menu is opened, PaneItemHeader no longer throws an unsupported error
    • When on top mode, PaneItemHeader is properly aligned to the other items.
    • Added NavigationPaneThemeData.headerPadding, which is applied to PaneItemHeader on open, compact and minimal mode. It defaults to 10 pixels at the top
    • BREAKING PaneItem.getPropertyFromTitle is now widget.getProperty:

    Before: getPropertyFromTitle<TextStyle>()

    Now: title.getProperty<TextStyle>()

    This was changed because the properties of PaneItemHeader needed to be accessed, but the old version only supported to get the properties of PaneItem.title. It can be called on a Text, RichText or in an Icon widget

    • InheritedNavigationView is now accessible on the top overflow menu
    • Added NavigationPaneThemeData.selectedTopTextStyle and NavigationPaneThemeData.unselectedTopTextStyle, which is applied to the items on top mode
    • Fixed content focus on minimal mode
    • Updated default transitions for top mode: HorizontalSlidePageTransition
  • Fix incorrect translation of TimePicker in Traditional Chinese.

  • Added ScaffoldPage.resizeToAvoidBottomInset (#444)

  • Consider view padding for NavigationAppBar

  • Scrollbar updates (#356):

    • Correctly use backgroundColor to display the track color
    • Added padding and hoveringPadding
    • Check if animation is disposed before using it (#446)
  • 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.defaultItemSorter is used by default
    • Overlay's height is now correctly calculated based on the screen size. It no longer overlaps the screen. viewPadding is also taken into consideration
    • Close the overlay if the textbox width is changes (#456)
    • .items can be dynamically loaded (#387)
    • BREAKING .items is now a List<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(),
      ...
    )
    
  • Combobox updates (#454):

    • Popup size is now correctly calculated (#413)
    • Correctly clip the popup while performing the animation (#379)
  • Correctly check if a locale is supported (#455)

Release candidate 2

  • Remove whitespace on ContentDialog if 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 PopupContentSizeInfo was renamed to ContentSizeInfo
  • 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
  • Reviewed animation durations (#421)
    • BREAKING Removed .animationDuration and .animationCurve from ScrollbarThemeData
    • Added expandContractAnimationDuration and contractDelay to ScrollbarThemeData
  • NavigationPaneSize constraints are now correctly applied when in open mode (#336)
  • NavigationIndicator can't be invisble anymore when animation is stale (#335)
  • Updated TabView:
    • BREAKING Removed TabView.bodies. Now, Tab.body is used. Before

      TabView(
        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 TabView tabs' constraints and padding

    • Fixed tab width when TabWidthBehavior is compact

    • FlutterLogo is no longer the default tab Icon

  • DropDownButton menu is now sized correctly according to the screen size
  • If there isn't enough space to display the menu on the preferred position, Flyout will display on the opposite position (#435)

Release candidate 1

  • Exposed private properties that makes it easier to create custom panes for NavigationView (#365):

    • kCompactNavigationPaneWidth
    • kOpenNavigationPaneWidth
    • NavigationPane.changeTo
    • PaneItem.getPropertyFromTitle
  • PaneScrollConfiguration is now applied to custom pane on NavigationView

  • 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 using DisableAcrylic
    • TextChangedReason.suggestionChoosen is now called properly
  • Updated TextBox:

    • TextBox colors 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 selected is null, a placeholder text is shown (#306)
    • Added new localization messages: hour, minute, AM, PM, month, dayand year.
    • BREAKING Removed .hourPlaceholder, .minutePlaceholder, .amText, .pmText from TimePicker. It was replaced, respectivelly, by the hour, minute, AM, PM localization 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)
  • Update Slider (#405):

    • Added .thumbRadius and .trackHeight to SliderThemeData
    • The active track now isn't taller than the inactive track

What's Changed

New Contributors

Full Changelog: https://github.com/bdlukaa/fluent_ui/compare/v3.12.0...v4.0.0-pre.3