Skip to content

Releases: rydmike/flex_color_scheme

Version 5.0.0-dev.3

20 Apr 15:48
Compare
Choose a tag to compare
Version 5.0.0-dev.3 Pre-release
Pre-release

v5.0.0-dev.3 - April 20, 2022

Test release to verify builds and minor changes before stable release.

Documentation update

  • The package documentation has now moved too its own site at docs.flexcolorscheme.com.

  • It is a major update and rewrite of previous documentation. It also contains general Flutter theming guidance. One chapter is still work in progress. When it is completed, the stable v5.0.0 will be released.

Change: Custom "internal" and temporary m3TextTheme revised.

  • Style breaking with 4.2.0 and 5.0.0-dev.1 & 2
  • Breaks past used style when opting in on component themes and its optional custom m3TextTheme enabled. The updated custom implementation of it now follows the implementation used in Flutter master channel, apart from this issue, where it for now implements the value used in the M3 Web guide.
  • The changes in styles otherwise concern the addition of the font geometry, height, which the previous custom implementation did not have. The usage of the custom m3TextTheme should be considered internal and temporary, it will be changed to use the actual Flutter implementation once PR #97829 lands in Flutter stable channel. The custom m3TextTheme will then be deprecated.

Change: Computed colors for ThemeData colors primaryColorLight, primaryColorDark and secondaryHeaderColor were changed.

  • Style breaking with 4.2.0 and 5.0.0-dev.1 & 2, breaks past used styles on the rarely used colors primaryColorLight, primaryColorDark and secondaryHeaderColor.

  • These ThemeData colors are on a deprecation path and will likely receive some new none MaterialColor dependent color defaults when that change happens. The new ColorScheme.primary computed colors for these rarely used colors are better balanced than before, and work well regardless of used ColorScheme.primary shade and tint.

Change: Color definition for FlexColor.espressoLightPrimary color was changed.

  • Style breaking with 4.2.0 and 5.0.0-dev.1 & 2: New color for FlexColor.espressoLightPrimary breaks past used color for this color constant.

  • The color was changed from 0xFF220804 to 0xFF452F2B. Past color was too dark brown, almost black to be very usable in a UI. It was very black coffee like, but not very practical in a UI, it was too close to black. Since version 5 is anyway a major style breaking with the introduction of the new Material 3 ColorScheme, the opportunity to improve this color value used in the built-in theme espresso theme was used.

Examples

  • Examples contain minor improvements and fixes.

Version 5.0.0-dev.2

04 Apr 02:18
Compare
Choose a tag to compare
Version 5.0.0-dev.2 Pre-release
Pre-release

v5.0.0-dev.2 - April 4, 2022

BREAKING

  • Completed in version 4.0.0 planned, for version 5.0.0, removal of
    deprecated property surfaceStyle, including all its implementing classes,
    enums and helpers:

    • Removed property: surfaceStyle in FlexColorScheme.light.
    • Removed property: surfaceStyle in FlexColorScheme.dark.
    • Removed: enum FlexSurface, that surfaceStyle where.
    • Removed: factory FlexSchemeSurfaceColors.from that was used to create
      surface using the FlexSurface. The factory FlexSchemeSurfaceColors.blend
      replaced in version 4.0.0 already when using surfaceMode and blendLevel.
    • Removed tests and modified tests needing to consider above removals.
  • Deprecated property useSubThemes. This property has no function after
    4.2.0 stable and 5.0.0-dev.1. FlexColorScheme opinionated component sub-themes
    are now created by adding a default constructor FlexSubThemesData() or one with
    some custom property values set, to subThemesData. This creates sub-themes
    using the FlexColorScheme opinionated sub-themes. Removing this property makes the
    API more consistent. It now follows the same design that is used for keyColors
    with FlexKeyColors and tones with FlexTones.
    Setting the property useSubThemes will not cause an error, it just has no effect.
    You can safely remove it. The property useSubThemes will be removed in release 6.0.0.

  • The property navigationBarIsStyled in FlexSubThemesData was removed in
    v5.0.0-dev.1 as no longer needed. It is now kind of back with a new broader
    replacement called FlexSubThemesData.useFlutterDefaults.
    The in dev.1 version tested API-style to
    set various SchemeColor properties to null, to get SDK default for them was not
    nice. The FlexSubThemesData should default to its own preferred
    and recommended harmonized defaults when not defined. It is better to offer a
    toggle that can be set, to when possible/offer an opt-out from some bigger style
    differences from SDK defaults. This can be useful if one wants to create
    custom component themes and wish to start from less opinionated ones.
    The new useFlutterDefaults is false by default, and the sub-themes undefined
    null values result in its own harmonized and recommended settings. By setting
    it to true a bit messier and un-harmonized Flutter default are back. Currently,
    this impacts different styles and colors on BottomNavigationBar, NavigationBar,
    and NavigationRail. See API docs for details regarding
    defaults with this flag on and off.

  • The FlexSubThemesData property popupMenuRadius and the radius in
    corresponding static sub-theme helper FlexSubThemes.popupMenuTheme,
    now defaults to 4.
    In versions before v5.0.0-dev.2 it defaulted to 10. The M3 spec for it
    was not available when it was chosen originally. It was assumed to have
    higher border radius like rest of designs. However, the spec has it
    defined here now, and it
    is 4. Since border radius default values are stated in FlexColorScheme
    sub-theme design goals to follow the M3 design specs, it was updated to
    match the spec. A bit higher rounding, may actually fit better with
    the very round M3 design, try 8 or 10. It is very simple to change bach with
    the API.

FIX

  • Pub.dev analysis does not like document references to deprecated Flutter
    properties. Changed the primaryVariant and secondaryVariant references
    in document comments to primaryVariant and secondaryVariant. Nor does it
    like when you use tests to deprecated Flutter SDK members, removed them too,
    they were not needed either after some redesign of a few tests.

  • Fixed. When using sub-themes and selecting a ColorScheme based color, as
    color for the AppBar, instead of using abbBarStyle in light and dark
    factories, the appBarOpacity was not applied to the selected color. The
    priority of effective AppBar color was also revised to follow the norm,
    which from lowest to highest is:

    • abbBarStyle in light/dark factories and ThemeData extensions, which
      selects the used color from active scheme or colors, in the same
      factories or extensions.
    • appBarBackgroundSchemeColor in FlexSubThemesData when used.
    • appBarBackground in FlexColorScheme.

CHANGE

  • Changed the priority in FlexColorScheme when using direct input color
    properties, colorScheme input and using key color seeded ColorScheme
    generation. The new order is that input colorScheme is in this rare use case
    always overridden by the seed generate ColorScheme. This allows us
    to use a colorScheme as input to seed generation, where this color
    scheme could already have been externally seeded generated, but that we want
    to modify by using custom FlexTones or surface blends in FleColorScheme.
    The direct properties overrides the seeded color scheme as before, unless it
    is primary, secondary, tertiary or their container colors. In that case
    the keyColors, "keep" property determines if those colors are kept or not.

  • The FlexSubThemesData property inputDecorationRadius was deprecated and
    renamed to inputDecoratorRadius, to harmonize the other
    InputDecoration property names in FlexSubThemesData.
    The old name will be removed in release 6.0.0.

  • Deprecated and renamed navigationBarHighlightSchemeColor to
    navigationBarIndicatorSchemeColor in FlexSubThemesData, to
    harmonize the naming standard. Likewise, the parameter highlightSchemeColor
    ìn FlexSubThemes.navigationBarTheme was deprecated and replaced by
    indicatorSchemeColor. The old names will be removed in release 6.0.0.

  • In 5.0.0-dev.1, the renamed properties were deprecated and broken with 4.2.0.
    They are still deprecated, but now fallback via the old properties. They
    are no longer breaking. This concerns FlexSubThemesData properties:

    • bottomNavigationBarSchemeColor -> bottomNavigationBarSelectedLabelSchemeColor
    • navigationBarTextSchemeColor -> navigationBarSelectedLabelSchemeColor
    • navigationBarMutedUnselectedText -> navigationBarMutedUnselectedLabel
    • navigationBarIconSchemeColor -> navigationBarSelectedIconSchemeColor

    And FlexSubThemes.navigationBarTheme properties:

    • textSchemeColor -> selectedLabelSchemeColor
    • unselectedTextSchemeColor -> unselectedLabelSchemeColor
    • iconSchemeColor -> selectedIconSchemeColor
    • mutedUnselectedText -> mutedUnselectedLabel

    And FlexSubThemes.bottomNavigationBarTheme properties:

    • baseSchemeColor -> selectedLabelSchemeColor

    The old property names will be removed in release 6.0.0.

NEW

  • Added SchemeColor based theming of SnackBar background color via
    snackBarBackgroundSchemeColor in FlexSubThemesData and support for it
    in FlexSubThemes.

  • Changed the color values for FlexColor.materialLightSecondaryContainer and
    FlexColor.materialLightSecondaryContainerHc. These color properties
    do not have any specification in Material 2 spec. Updated the colors values
    that had been made up for dev.1 release to better match the design intent
    of those colors for the new Material 3 ColorScheme.

  • Added inputDecoratorUnfocusedBorderIsColored to FlexSubThemesData and
    support for it in FlexSubThemes via unfocusedBorderIsColored. Previously
    an unfocused or hovered border/underline always had a hint of selected
    base color. Setting this to false, leaves it at the grey defaults used by
    Flutter defaults.

  • Added navigationBarIndicatorOpacity and navigationRailIndicatorOpacity
    to FlexSubThemesData, to expose their already existing properties in
    corresponding sub-themes used by FlexColorScheme.

DEMO APPS

  • Themes Playground improvements:
    • Added a new single panel "Page" view. The previous large masonry grid view
      is still available. Both views can be used and switch to based on what
      is appropriate when using different media sizes.
    • The switches to keep main input colors for primary, secondary, tertiary
      and their containers, where separated so that their state and code
      generation for light and dark theme mode are separate. This makes them
      more useful for actual theme setup. Earlier you had to separate them by
      editing the generated code.
    • Added display of SnackBar style to the Themed Material panel.
    • Added display of more ListTile types.
    • Added ColorScheme based color selection theming of SnackBar background color.
    • Added CodeView as a panel of its own. It is now possible to view the
      changes to generated code as settings are changed. In the
      advanced view where one can keep it open and close other panels, except one
      being operated in. In page view it is shown as last page, however if
      the media is large enough, it is shown side-by-side with controls on current
      page. This is a really handy view for studying what each control does in
      the generated code.
    • Added missing code gen for button border radius.
    • Fixed broken code gen for dark mode blend level.
    • Decoupled all bundled theming controls in the app.
    • Added individual override controls for border radius to all components.
    • Added option to swap or not swap computed dark mode main and container color.
    • Added indicator opacity controls to NavigationBar and NavigationRail.
    • Reduced amount of pre-set defaults in the app, so it starts with simpler setup code.
    • Changed the code gen style for dark mode when using from light mode computed dark theme.
    • Changed the code gen, so it does not add any code when using API default values.
    • Changed the ThemeService to use generic types.

TESTS

  • Finalized test updates. Now 1684 te...
Read more

Version 5.0.0-dev.1

14 Mar 03:21
Compare
Choose a tag to compare
Version 5.0.0-dev.1 Pre-release
Pre-release

v5.0.0-dev.1 - March 14, 2022

Version 5 is a big refactor with deprecation of previous variant based
color names in favor of container ones that were added to updated M3
based ColorScheme in Flutter 2.10.0. The same additions and changes are now
also introduced in FlexColorScheme. Despite being a very big release, with
many new features, actual breaking changes are very few and mostly concerns
in version 4 deprecated members and of course requiring minimum Flutter
2.10.0 to work.

The WIP updates now includes the version of the key color seeded M3 ColorScheme
usage intended for the final design. The feature supports seeding by not only
using a single primary key color, but also using separate key colors for
secondary and tertiary colors. The Flutter SDK ColorScheme.fromSeed only
support using a single color as seed. The primary, secondary and tertiary
color are used as key color seeds, when seeding is used, and by default all
three color are used as key for their respective tonal palette used by
the generated ColorScheme. Using secondary and teritary colors can each
optionally be turned OFF. If both are, the result is same as when using
ColorScheme.fromSeed, with the primary color as seed key color.

When using a key seed color generated ColorScheme, it may sometimes, e.g. for
branding purposes, be useful to lock a certain color in the resulting
ColorScheme to the actual key color value used for primary, secondary
and tertiary. FlexColorScheme includes scheme appropriate colors for
each of these color properties, as well
their containers. You can for each property define which ones you want to keep
as defined by these input colors, in the seed generated ColorScheme. You
can of course use this feature with custom input colors as well.

The bundled example 5, the Themes Playground is now fully up to date with all
the new features. Its updated code generation still
needs results verification.

There are also now in Flutter master channel more actual
M3 impacts and ThemeData color property deprecations commits landed in Flutter
master channel that I reviewed and prepared for in advance when possible.

Much work on tests, and readme documentation updates remain, but API docs are
up-to-date. And this book long change log should help. There are only a few
breaking changes, and most of them are rarely used properties, so migration
should be relatively easy, despite the long list of changes and new features.

BREAKING

  • Requires at least Flutter stable 2.10.0.This release uses new M3 ColorScheme
    properties that are not included before Flutter version 2.10.0, as well
    as the ThemeData flag useMaterial3.

  • Removed parameter surfaceStyle from FlexThemeData
    extensions FlexThemeData.light and FlexThemeData.dark that uses
    in version 4.2.0 already deprecated property surfaceStyle in FlexColorScheme
    class. The same deprecated property surfaceStyle in FlexColorScheme class
    is still available in 5.0.0-dev.1. In the stable release 5.0.0 it might
    be removed as well. They were all scheduled for deprecation in version 5.0.0,
    but keeping it around a bit longer in the main class in 5.0.0-dev releases
    to prolong backwards API compatibility during development. Maybe I will keep
    it in the release too, many tests need to be rewritten when they are removed.

  • The enum SchemeColor has new values and past values are in a
    new order. The order was changed to accommodate new color values and to
    keep them in the same order as their corresponding color properties
    in M3 ColorScheme. The change of order is potentially breaking, but unlikely
    to break anything in major ways, other than possibly local storage of selected
    enum values. In the bundled samples you might for example see wrong color
    selections loaded from local storage, just reset or select correct value
    to fix it.

  • To get more harmonized setup on opt-in sub themes for NavigationBar,
    BottomNavigationBar and NaivgationRail a few properties in
    FlexSubThemesData and FlexSubThemes had to be modified and broken.
    Impact is estimated to be low for most users.

    The following properties were renamed in FlexSubThemesData:

    • navigationBarTextSchemeColor -> navigationBarSelectedLabelSchemeColor
    • navigationBarMutedUnselectedText -> navigationBarMutedUnselectedLabel
    • navigationBarIconSchemeColor -> navigationBarSelectedIconSchemeColor
    • bottomNavigationBarSchemeColor -> bottomNavigationBarSelectedLabelSchemeColor

    In FlexThemeData the property navigationBarIsStyled was removed. It is
    no longer needed. The same end result it enabled can be achieved by
    by setting all NavigationBar related properties in FlexSubThemesData that
    have a none null default value to null.

    The following parameters were renamed in FlexSubThemes.navigationBarTheme:

    • textSchemeColor -> selectedLabelSchemeColor
    • unselectedTextSchemeColor -> unselectedLabelSchemeColor
    • iconSchemeColor -> selectedIconSchemeColor
    • mutedUnselectedText -> mutedUnselectedLabel

    The following parameter wa renamed in FlexSubThemes.bottomNavigationBarTheme:

    • baseSchemeColor -> selectedLabelSchemeColor

NEW

  • Added useMaterial3 to all theme constructors and factories. This is
    the same flag as in ThemeData, it does not have any major impact on
    default themed widgets in Flutter 2.10.x. Opting in on opinionated
    sub-themes, will however as before give opinionated component sub-themes that
    result in Material 3 like styles. Similar look will become default widget
    design in later Flutter SDK versions when using the flag useMaterial3 is
    set to true.

  • Added new properties onPrimaryContainer, onSecondaryContainer,
    tertiary, tertiaryContainer, onTertiary and onTertiaryContainer to
    the un-namedFlexColorScheme constructor and factories
    FlexColorScheme.light and FlexColorScheme.dark, as well as to extension
    FlexThemeData to extensions FlexThemeData.light and FlexThemeData.dark
    on ThemeData.

  • In FlexColor added new color properties for all color values to cover the
    new "Container" color properties in Flutter 2.10 new M3 ColorScheme.
    For every built-in FlexColor, there are now also these new color properties:

    • primaryContainer
    • secondaryContainer
    • tertiary
    • tertiaryContainer

    The previous color values maps as follows:

    • tertiary = old secondaryVariant color value, that is deprecated
      for each color value.
    • Old primaryVariant, is just deprecated for each color value.

    The "variant" colors are still available as deprecated properties, and will
    remain available until version 6.0.0. The old color properties and their values
    still work as inputs, and they produce same equivalent ColorScheme results
    as before. This is done by the values still being assigned as fallback value
    in custom schemes so that new:

    • primaryContainer, if not assigned, falls back via old primaryVariant.
    • secondaryContainer, if not assigned, falls back via old secondaryVariant.

    When it comes to the new built-in scheme designs, the color used on past:

    • secondaryVariant was a reasonable fit for new M3 tertiary color property
      and was used as its value.
    • The new properties secondaryContainer and
      tertiaryContainer, had to get new built-in color values that fit with
      the M3 design intent for those color properties. This while considering the
      value secondary already had, and the value tertiary got by being
      assigned the color value of past secondaryVariant.
    • The new color property primaryContainer also needed a new color value. The
      past primaryVariant is not the correct design fit for how the color
      value is intended to be used in M3 Color design.
    • In many cases it was possible to make nice color schemes, by reshuffling
      some existing color values and using colors from light scheme, in container
      properties in dark scheme and vice versa. Sometimes new better tuned
      color values were used. In all events all Container color properties
      are new features in this release, so they are considered "new" even
      if their color value might have been recycled from previous properties
      in some cases. Some Container color values may still be fine-tuned
      before final 5.0.0 release, but it is unlikely.
  • In class FlexSchemeColor added new color properties
    primaryContainer and secondaryContainer they replace
    deprecated properties primaryVariantand secondaryVariant. The old
    properties still work and are
    used as fallback to the new ones when the new ones are not provided.
    The previous properties are still available as deprecated, and will remain
    available until version 6.0.0, or until they are removed from the Flutter
    stable channel, whichever comes first. The properties for built-in schemes
    were assigned to their new corresponding FlexColorvalues.

  • In class FlexSchemeColor added new color definitions from FlexColor
    for FlexSchemeColor.tertiary and FlexSchemeColor.tertiaryContainer.

  • In class FlexSchemeColor the FlexSchemeColor.secondaryContainer
    and FlexSchemeColor.tertiaryContainer should be brighter versions of their
    none container parent light mode and darker in dark mode. They receive
    such color values via new corresponding FlexColorvalues.

  • In factory FlexSchemeColor.from added optional and nullable parameter
    brightness. If not assigned, the factory works as before, producing a
    complete FlexSchemeColor from just one or more color proper...

Read more

Version 4.2.0

24 Jan 15:54
Compare
Choose a tag to compare

v4.2.0 - January 24, 2022

  • New: Updated required Dart SDK to minimum 2.15 that Flutter 2.8.0 uses.
    To use this release at least Flutter 2.8.0 is required.

  • New: Added support for opinionated sub-theme for the new Material 3 based
    NavigationBar. Flutter version 2.8.0 is the first stable version that
    includes the new Material 3 design based NavigationBar.

  • Deprecated: The property surfaceStyle has been deprecated. In
    version 4.0.0 it was already recommended to use, the then introduced more
    powerful surface branding properties surfaceMode and blendLevel instead.
    The surfaceStyle property is still available and works as before, but you
    now get a deprecation warning if it is used. The property and all its related features
    will be completely removed in version 5.0.

  • New: Custom FlexColorScheme based themes can now also be defined by
    alternatively passing in a ColorScheme object to the colorScheme
    property in default the constructor, as well as in FlexColorScheme.light and
    FlexColorScheme.dark factories. When used it overrides the scheme and
    colors properties in the factories. Same color property in any constructor
    that exist as direct property in the constructors, still have the highest
    priority and will also override corresponding color properties in passed in
    colorScheme. The capability to make custom FlexColorScheme based themes from
    standard Flutter color schemes is useful if you already have a predefined
    elaborate ColorScheme definition. You can now use it directly and still
    use FlexColorScheme for its surface color branding and easy sub-theming.
    This capability will also be very useful when Material 3 based ColorScheme
    in Flutter SDK arrives in the stable channel. With Material 3, color schemes
    may be created using new Material 3 design based color tools, e.g. from
    seed color(s) or using dynamic colors extracted from system wallpaper colors.
    With this feature it will then be able to feed those colors directly into
    FlexColorScheme, and use them as colors to create your ThemeData.

  • Changed: All properties in all FlexColorScheme constructors are now
    optional. The change is none breaking, and uses Material 2 based
    design guide example theme light and dark as defaults for undefined values.

  • New: Added a ColorScheme color selection option to selected opinionated
    sub-themes configuration class FlexSubThemesData. The sub-themes that
    support changing their ColorScheme based
    used theme color selection, have one or more properties called
    nnnSchemeColor where nnn describes the color feature that can be set
    to an alternative ColorScheme based color and not just its pre-defined
    ColorScheme based color property.
    The color selector is a SchemeColor enum property value that is used to
    select the enum value that corresponds to same named color
    property value in theme.colorScheme. This SchemeColor color quick
    selection option has been added to:

    • Theming TextField via FlexSubThemes.inputDecorationTheme to select a
      base color for the border and fill color.
    • TabBar sub-theming to select its indicator color, when you want it to be a
      different color than the color of the TabBar icon and text, which are
      controlled via FlexTabBarStyle in the FlexColorScheme.tabBarStyle
      property as before. It gives you an easy option to override the indicator
      color with any of the theme's colorScheme colors.
    • To BottomNavigationBar via FlexSubThemes.bottomNavigationBar to set the
      preferred color of the icon and label text in the Material 2 based
      BottomNavigationBar, as well as used container background color.
    • NavigationBar in FlexSubThemes.navigationBarTheme to set the
      preferred ColorScheme color of the text, icon in the Material 3 based
      NavigationBar, as well as the pill shaped highlight color separately that
      surrounds the selected icon and its container background color.
    • ChipThemeData from FlexSubThemes.chipTheme to change the used
      ColorScheme based base color of Chips.
  • The SchemeColor properties for the above sub-themes have a default selection
    that results in same ColorScheme color values being used as they had
    before. The additional configuration options are none breaking. The enum
    properties to modify the used ColorScheme color can be defined in the
    configuration class FlexSubThemesData using its new properties:

    • inputDecoratorSchemeColor
    • chipSchemeColor
    • tabBarIndicatorSchemeColor
    • bottomNavigationBarUsedColor
    • bottomNavigationBarSchemeColor
    • bottomNavigationBarBackgroundSchemeColor
    • navigationBarIconSchemeColor
    • navigationBarTextSchemeColor
    • navigationBarHighlightSchemeColor
    • navigationBarBackgroundSchemeColor
  • Usage examples of the above new configuration possibilities have been added to
    the default example, the so-called developers hot reload playground.

  • The ColorScheme color selection in SchemeColor includes all colors in
    ColorScheme supported by Flutter 2.8. You may want to avoid using the
    primaryVariant and secondaryVariant colors if you want to avoid later
    migrations. These variant colors are being deprecated in Flutter SDK,
    see #93427.

  • A later FlexColorScheme version will add support for the new Material 3
    colors in ColorScheme when they land in the stable channel.

  • This quick selection of ColorScheme based colors as none standard themed
    colors of widget sub-themes, may be extended to a few more sub-themes in
    future versions. At least if it is seen as a practical and quick way to
    customize widget sub-theme colors within the constraints of colors in
    the theme.colorScheme.

  • As before you can still apply your own total custom sub-themes to the
    ThemeData created with FlexColorScheme by using copyWith.
    FlexColorScheme is a way to easily make fancy and color wise consistent and
    balanced ThemeData objects using convenience shortcut properties and
    methods. It does not prevent you from further modifying and tuning the
    produced ThemeData with standard Flutter SDK features.

  • Removed: The uses-material-design: true line from library
    pubspec.yaml file was removed. It is not needed since Material icon
    features are not used by this package.

  • Example 5 - Themes Playground

    • Fixed onColor for a few colors in the ThemeData color presentation boxes
      for cases where it might differ from colorScheme onColors. This could happen
      when disabling FlexColorScheme.
    • Fixed index on _AppBarSettings card.
    • Changed the feature that animate hides not available options based on selections
      to a version that disables them and resets their state while disabled.
      Plus a few controls are hidden but take up same space.
      Hiding the controls caused the panels to change size, often causing relayout
      of the masonry grid layout. This was confusing UX, as entire panels might
      move into new places. While the UI hide animations were cool, this keeps
      the panels in same place in the grid, which is less confusing to use.
      Panels can still be closed and it of course causes relayout of the grid too,
      but in that use case it is expected.
    • Changed ColorScheme indicator boxes to use the themed border radius.
    • Added a button to copy theme, and improved the explanations to make the
      functionality more obvious and accessible. Previously only the entire
      ListTile was the button, this UI with no button was not so clear. Now
      there is also a button that says COPY. Clicking on the ListTile still
      works as well.
    • Add and updated app icon resources used by all the example apps.
    • Update to new breaking version of StaggeredGridview 0.6.0. It no longer
      requires previously used bug work around(s) for a window resize issue that
      had existed since 2019. For more info on this solved issue, see this
      article.
    • Added most new features in version 4.2.0 to the Themes Playground app and
      its theme code generation.
  • Example theme - Copy Playground Theme

    • Added a new simple template example, that is handy for trying copy-pasted
      theme setup code, generated by the Themes Playground example 5.
  • Documentation: Reviewed and corrected many API docs. The API docs are
    very thorough and complete. They usually cover any question you might have and
    more. Added a brief "API Intro and Guide" chapter to the readme.

  • Tests: Added tests to cover the new features, now total 1123 tests.

Version 4.1.1

06 Dec 20:02
Compare
Choose a tag to compare

[4.1.1] - November 20, 2021

  • Documentation: Fixed a broken link in the readme that pub.dev analyser found.
  • This release was previously not published on GitHub, because it is basically the same release as 4.1.0, but with a readme.md fix needed for pub.dev, since it caused a score reduction on pub.dev.

Version 4.1.0

20 Nov 05:45
Compare
Choose a tag to compare

[4.1.0] - November 20, 2021

  • Fix: The defaultRadius in FlexSubThemesData now defaults to null
    so all sub-themes border radius will default to M3 default border
    radius per widget. The const default value it had was a remnant from early
    dev phase when widgets all defaulted to single shared radius and not M3
    defaults per widget type. If you explicitly passed in null, you did also in
    previous version get the M3 defaults. Older tests did that, now they expect
    same result when no value is assigned, as it should have been.

  • Examples: Updated and tuned the examples. Example 5 "Themes Playground"
    now includes capability to define custom color schemes starting from built-in ones.
    It can also generate the FlexColorScheme setup code needed for any defined
    viewed theme setup. You can copy/paste a theme's Flutter Dart code,
    from the Themes Playground to your app and use it as its theme. This is a very
    quick and convenient way to try a theme you made and see in the Themes
    Playground in your own app.

  • Opt in opinionated sub themes minor style changes:

    • Added missing themed background color for SnackBarThemeData when
      using opt in opinionated sub themes.
    • Tuned the colored text theme on the sub themes that is applied when
      using the optional colored text themes. The text styles now better match
      the regular none colored style,
      and they are a bit more subtle. Text style caption got a bit
      of opacity. M2 designed widgets like ListTile, depend on it for
      making more muted subtitles by default for ListTile via the heading level
      opacity on caption text style. The opacity on it is lower though, to
      retain a bit more contrast on blended surfaces, while still adhering to
      the style intent.

      Minor details on the opinionated sub themes may still be tuned and
      changed slightly as a part of improving them and their appeal. For the
      text theme coloring future version may expose parameter(s) that can be
      used to adjust the color tint effect on text theme when colored
      text theme is enabled.

  • Major updates to readme doc, and typo corrections.

  • Tests:

    • Modified tests to catch the fixed defaultRadius issue.
    • Added more tests, now total 1069 tests.

Version 4.0.0-example.5

17 Nov 22:20
Compare
Choose a tag to compare
Pre-release

[4.0.0-example.5] - November 18, 2021

  • Package wise this is the same version as 4.0.0, but the examples were updated in this release. Example 5 got custom scheme feature and capability to get the code for the theme. Also testing the CI/CD build and deploy script with this release.

Version 4.0.0

13 Nov 11:44
Compare
Choose a tag to compare

[4.0.0] - November 13, 2021

  • The new V4 docs are still a bit lacking and will be improved in docs
    updates later.

  • The breaking case is a minor difference in produced style for true
    black mode. Version 4.0.0 is still fully API compatible with version 3.
    Version 4.0.0 does however contain so many new
    features, that it in itself warrants a new major release bump.

  • Breaking: In dark mode, the darkIsTrueBlack now makes surface color
    8% darker instead of 6%. This change was needed to support overlay color
    in dark mode when using darkIsTrueBlack when using the new surfaceMode
    property. For more information see Flutter SDK
    issue 90353.

  • Fix/Breaking: From the color scheme English descriptions the sentence
    end "." was removed from all description strings. If and when you want one,
    you can add it as needed.

  • New: Added a more flexible and powerful alpha blending feature for
    surface and background colors. The new properties in the FlexColorScheme
    factories light and dark are surfaceMode, of type enum FlexSurfaceMode
    and integer blendLevel. Consider using them instead of previous
    surfaceStyle.
    The surface color blend style surfaceStyle is still default, and not yet
    deprecated, but may be so in later versions. It is not really needed anymore,
    but there was no major reason to break things by removing it either.

  • New: Major new feature; easy sub-theming of Flutter SDK UI widgets.

    • You can opt in on nice looking opinionated widget sub-themes by setting
      FlexColorScheme.useSubThemes to true, it is false by default.
    • The default settings for the sub-theme is inspired by
      Material 3 design (M3) It mimics it to large extent
      when using default value sub-theme values and settings. The varying corner
      radius is different per widget type. The new TextTheme Typography is also
      included. All parts cannot be made to look exactly like M3 in Flutter when using
      Material 2 design (M2), but many parts
      can, and where possible the defaults try follow those values. You can of
      course override the default.
    • You can tweak these sub themes with a number of parameters
      defined in the FlexSubThemesData class, passed to
      FlexColorScheme.subThemesData.
    • The FlexSubThemesData class provides parameters for easy adjustment
      of corner radius in Widgets that use ShapeBorder or decorations, that
      support changing the Widget's corner radius. With the sub themes enabled, you
      can easily create a theme with a consistent corner radius on built-in
      Flutter SDK UI widgets.
    • The widget sub-themes also harmonize a few other styles, e.g. ToggleButtons
      to match the standard buttons regarding size and design as far as possible.
    • In case you still use the old deprecated buttons, they also get
      ButtonThemeData that as far as possible match the same style.
    • Via the sub themes it is by default opted-in to also use a bit Material You
      like coloring on the text styles. This can also be opted out of, even if
      otherwise opting in on sub-themes, it is on by default when opting in on
      sub themes.
  • New: Added FlexThemeData static extension on ThemeData.

    • FlexColorScheme Themes can now also be created with the new syntax
      FlexThemeData.light and FlexThemeData.dark, instead of using
      FlexColorScheme.light().toTheme and FlexColorScheme.dark().toTheme.
    • The toTheme method is still available and works as before. It will not
      be deprecated. It is needed when making elaborate custom sub themes beyond
      what is offered when using FlexColorScheme based opt-in sub themes. When
      you make custom sub themes yourself, you often need access to
      the ColorScheme that is defined in current FlexColorScheme() instance.
      You can get it with FlexColorScheme().toScheme. Then use this
      this standard ColorScheme or any of its colors, in your custom sub theme
      definitions, that you then add with copyWith to your FlexColorScheme based
      theme, like FlexColorScheme().toTheme.copyWith(..."your sub themes and other ThemeData over-rides here").
  • New: Added textTheme and primaryTextTheme properties to
    FlexColorScheme to enable easy setup of custom TextThemes, without the
    need to add a custom TextTheme via a copyWith, plus merge with the
    default text theme.

  • New: Added FlexColorScheme.dialogBackground as a background surface
    color that can be controlled and themed separately.

  • New: Added appBarOpacity to FlexColorScheme.light() and dark().
    With it, you can apply themed opacity to the AppBar background color to
    the selected FlexAppBarStyle it is using.

  • New: On the FlexColorScheme factories light and dark, exposed
    the Color properties primary, primaryVariant, secondary,
    sedondaryVariant, appBarBackground, dialogBackground and error.
    They all default to null, but if provided they can be used as override values
    to factory behaviors defined by scheme, colors, appBarStyle,
    surfaceMode and surfaceStyle that
    otherwise via the factories define the colors for these properties. If a value
    for one of the new direct color properties is used with the factory, it always
    has precedence over other properties that assign or compute colors for it.

  • New: Exposed boolean property applyElevationOverlayColor. It has the same
    function as the same property in ThemeData. It applies a semi-transparent
    overlay color on Material surfaces to indicate elevation for dark themes.
    In FlexColorScheme it defaults to true. In Flutter ThemeData.from it
    also default to true, but in ThemeData it defaults to false.
    The property is just available for convenience, so you can avoid a copyWith
    if you wish to turn it off. It is not necessarily needed or even desired when
    using strong alpha blends on surfaces in dark mode, to use an elevation
    overlay color.

  • New: All FlexSchemeData objects in FlexColor are exposed as static
    const objects, making them easy to pick and reuse as const objects
    individually in custom color scheme lists, or as input to the colors
    property. Previously only the individual color value definitions were exposed.

  • New: Added convenience extension .blendAlpha() on Color
    in FlexColorExtensions.

  • New: The FlexThemeModeSwitch got a bool property hasTitle, if set
    to false it removes the title entirely.

  • New: The FlexThemeModeSwitch got a buttonOrder property using enum
    FlexThemeModeButtonOrder that you can use to define the order of its
    light, system and dark theme mode buttons, in all possible combinations.

  • New: Added edgeToEdge support to
    FlexColorScheme.themedSystemNavigationBar. This brings the previously
    experimental support for transparent system navigation bar in Android
    into the supported fold in FlexColorScheme. Its functionality
    requires min Android SDK level 29, but other than that it works without
    Android setup shenanigans. No added APIs, the API for it already existed
    in previous version of FlexColorScheme, using it did however require
    special Android build configuration setup, this is no longer required.

  • Change: The FlexColor.schemesList is now a const for improved
    efficiency.

  • New color schemes: Added four new built-in color schemes.
    Total number of color schemes is now 36 matched light and dark pairs.

    • Blue whale - Blue whale, jungle green and outrageous tango orange.
      Use enum value FlexScheme.blueWhale for easy access to it.
      This theme is final and selected for inclusion as a new one.
    • San Juan blue - San Juan blue and pink salmon theme.
      Use enum value FlexScheme.sanJuanBlue for easy access to it.
    • Rosewood - Rosewood red, with horses neck and driftwood theme.
      Use enum value FlexScheme.rosewood for easy access to it.
    • Blumine - Blumine, easter blue and saffron mango theme.
      Use enum value FlexScheme.blumineBlue for easy access to it.
  • Documentation:

    • The new main example is a complete quick start guide that doubles as
      "developers" hot reload based playground template. It has comments
      explaining what is going on.
      If you skip reading the readme docs and tutorial, the example may help
      to kick-start using FlexColorScheme and all its features. It shows most
      of the features in last tutorial example 5, but without any interactive UI.
      You are the UI and can edit prop values and use hot-reload to see changes.
    • All examples now use the new FlexThemeData extension syntax to create the
      ThemeData and surfaceMode to define the alpha blended surfaces.
    • Examples 2 to 5 also use the in Flutter 2.5 new skeleton architecture with
      a ChangeNotifier based controller, AnimatedBuilder to listen to it and
      an abstract service to get and persist the theme settings, with a concrete
      in-memory implementation, plus the implementations to persist the theme.
      • Examples 2 to 4 use the Hive implementation.
      • Example 5 uses the SharedPreferences implementation
  • Tests:

    • Added tests for the new features, total 1066 tests,
    • Coverage 99%, will improve them more later.

Version 4.0.0-dev.1

13 Nov 01:14
Compare
Choose a tag to compare
Version 4.0.0-dev.1 Pre-release
Pre-release

[4.0.0-dev.1] - November 13, 2021

  • The breaking case refer to a minor difference in produced style for true
    black mode. Version 4.0.0 is still fully API compatible with version 3.
    Major version was bumped due to the small change in produced output in some
    rare usage options. Version 4.0.0 does however contain so many new
    features, that it in itself warrants a new major release bump.

  • Breaking: In dark mode, the darkIsTrueBlack now makes surface color
    8% darker instead of 6%. This change was needed to support overlay color
    in dark mode when using darkIsTrueBlack when using the new surfaceMode
    property. For more information see Flutter SDK
    issue 90353.

  • Fix/Breaking: From the color scheme English descriptions the sentence
    end "." was removed from all description strings. If and when you want one,
    you can add it as needed.

  • New: Added a more flexible and powerful alpha blending feature for
    surface and background colors. The new properties in the FlexColorScheme
    factories light and dark are surfaceMode, of type enum FlexSurfaceMode
    and integer blendLevel. Consider using them instead of previous
    surfaceStyle.
    The surface color blend style surfaceStyle is still default, and not yet
    deprecated, but may be so in later versions. It is not really needed anymore,
    but there was no major reason to break things by removing it either.

  • New: Major new feature; easy sub-theming of Flutter SDK UI widgets.

    • You can opt in on nice looking opinionated widget sub-themes by setting
      FlexColorScheme.useSubThemes to true, it is false by default.
    • The default settings for the sub-theme is inspired by
      Material 3 design (M3) It mimics it to large extent
      when using default value sub-theme values and settings. The varying corner
      radius is different per widget type. The new TextTheme Typography is also
      included. All parts cannot be made to look exactly like M3 in Flutter when using
      Material 2 design (M2), but many parts
      can, and where possible the defaults try follow those values. You can of
      course override the default.
    • You can tweak these sub themes with a number of parameters
      defined in the FlexSubThemesData class, passed to
      FlexColorScheme.subThemesData.
    • The FlexSubThemesData class provides parameters for easy adjustment
      of corner radius in Widgets that use ShapeBorder or decorations, that
      support changing the Widget's corner radius. With the sub themes enabled, you
      can easily create a theme with a consistent corner radius on built-in
      Flutter SDK UI widgets.
    • The widget sub-themes also harmonize a few other styles, e.g. ToggleButtons
      to match the standard buttons regarding size and design as far as possible.
    • In case you still use the old deprecated buttons, they also get
      ButtonThemeData that as far as possible match the same style.
    • Via the sub themes it is by default opted-in to also use a bit Material You
      like coloring on the text styles. This can also be opted out of, even if
      otherwise opting in on sub-themes, it is on by default when opting in on
      sub themes.
  • New: Added FlexThemeData static extension on ThemeData.

    • FlexColorScheme Themes can now also be created with the new syntax
      FlexThemeData.light and FlexThemeData.dark, instead of using
      FlexColorScheme.light().toTheme and FlexColorScheme.dark().toTheme.
    • The toTheme method is still available and works as before. It will not
      be deprecated. It is needed when making elaborate custom sub themes beyond
      what is offered when using FlexColorScheme based opt-in sub themes. When
      you make custom sub themes yourself, you often need access to
      the ColorScheme that is defined in current FlexColorScheme() instance.
      You can get it with FlexColorScheme().toScheme. Then use this
      this standard ColorScheme or any of its colors, in your custom sub theme
      definitions, that you then add with copyWith to your FlexColorScheme based
      theme, like FlexColorScheme().toTheme.copyWith(..."your sub themes and other ThemeData over-rides here").
  • New: Added textTheme and primaryTextTheme properties to
    FlexColorScheme to enable easy setup of custom TextThemes, without the
    need to add a custom TextTheme via a copyWith, plus merge with the
    default text theme.

  • New: Added FlexColorScheme.dialogBackground as a background surface
    color that can be controlled and themed separately.

  • New: Added appBarOpacity to FlexColorScheme.light() and dark().
    With it, you can apply themed opacity to the AppBar background color to
    the selected FlexAppBarStyle it is using.

  • New: On the FlexColorScheme factories light and dark, exposed
    the Color properties primary, primaryVariant, secondary,
    sedondaryVariant, appBarBackground, dialogBackground and error.
    They all default to null, but if provided they can be used as override values
    to factory behaviors defined by scheme, colors, appBarStyle,
    surfaceMode and surfaceStyle that
    otherwise via the factories define the colors for these properties. If a value
    for one of the new direct color properties is used with the factory, it always
    has precedence over other properties that assign or compute colors for it.

  • New: Exposed boolean property applyElevationOverlayColor. It has the same
    function as the same property in ThemeData. It applies a semi-transparent
    overlay color on Material surfaces to indicate elevation for dark themes.
    In FlexColorScheme it defaults to true. In Flutter ThemeData.from it
    also default to true, but in ThemeData it defaults to false.
    The property is just available for convenience, so you can avoid a copyWith
    if you wish to turn it off. It is not necessarily needed or even desired when
    using strong alpha blends on surfaces in dark mode, to use an elevation
    overlay color.

  • New: All FlexSchemeData objects in FlexColor are exposed as static
    const objects, making them easy to pick and reuse as const objects
    individually in custom color scheme lists, or as input to the colors
    property. Previously only the individual color value definitions were exposed.

  • New: Added convenience extension .blendAlpha() on Color
    in FlexColorExtensions.

  • New: The FlexThemeModeSwitch got a bool property hasTitle, if set
    to false it removes the title entirely.

  • New: The FlexThemeModeSwitch got a buttonOrder property using enum
    FlexThemeModeButtonOrder that you can use to define the order of its
    light, system and dark theme mode buttons, in all possible combinations.

  • New: Added edgeToEdge support to
    FlexColorScheme.themedSystemNavigationBar. This brings the previously
    experimental support for transparent system navigation bar in Android
    into the supported fold in FlexColorScheme. Its functionality
    requires min Android SDK level 29, but other than that it works without
    Android setup shenanigans. No added APIs, the API for it already existed
    in previous version of FlexColorScheme, using it did however require
    special Android build configuration setup, this is no longer required.

  • Change: The FlexColor.schemesList is now a const for improved
    efficiency.

  • New color schemes: Added four new built-in color schemes.
    Total number of color schemes is now 36 matched light and dark pairs.

    • Blue whale - Blue whale, jungle green and outrageous tango orange.
      Use enum value FlexScheme.blueWhale for easy access to it.
      This theme is final and selected for inclusion as a new one.
    • San Juan blue - San Juan blue and pink salmon theme.
      Use enum value FlexScheme.sanJuanBlue for easy access to it.
    • Rosewood - Rosewood red, with horses neck and driftwood theme.
      Use enum value FlexScheme.rosewood for easy access to it.
    • Blumine - Blumine, easter blue and saffron mango theme.
      Use enum value FlexScheme.blumineBlue for easy access to it.
  • Documentation:

    • The new main example is a complete quick start guide that doubles as
      "developers" hot reload based playground template. It has comments
      explaining what is going on.
      If you skip reading the readme docs and tutorial, the example may help
      to kick-start using FlexColorScheme and all its features. It shows most
      of the features in last tutorial example 5, but without any interactive UI.
      You are the UI and can edit prop values and use hot-reload to see changes.
    • All examples now use the new FlexThemeData extension syntax to create the
      ThemeData and surfaceMode to define the alpha blended surfaces.
    • Examples 2 to 5 also use the in Flutter 2.5 new skeleton architecture with
      a ChangeNotifier based controller, AnimatedBuilder to listen to it and
      an abstract service to get and persist the theme settings, with a concrete
      in-memory implementation, plus the implementations to persist the theme.
      • Examples 2 to 4 use the Hive implementation.
      • Example 5 uses the SharedPreferences implementation
  • TODO Documentation:

    • Some older documentation that is not relevant was removed, like older APIs
      no longer described in read me, only in API docs.
    • Almost all screenshots will need to be updated. (sigh)
    • Typo review and corrections.
  • TODO Tests:

    • Added tests for the new features, total 1066 tests,
    • Coverage is 98%, a few more tests to be added before release.

Version 3.0.1

01 Jul 15:54
Compare
Choose a tag to compare

[3.0.1] - July 1, 2021

  • Fix: The internal order of swapping primary and secondary colors and reducing
    used colors in static function FlexSchemeColor.effective(FlexSchemeColor colors, int usedColors, {bool swapColors = false}) matters for the intended result when
    used together in the same call. The function now swaps primary and secondary colors,
    before reducing the used colors.
  • Tests: Added tests for above fix that captures the issue and fails
    in version 3.0.0. Total 741 tests, coverage 99.75%.
  • Documentation and typo fixes.