PackageTrack
Sign in Get early access

layrz_theme

Layrz standard styling library for Flutter. Widget library following the Material Design 3 guidelines, with a focus on reliavility and functionality.

7.10.0 3.2K downloads/mo #4550 most downloaded on pub.dev goldenm-software/layrz_theme

What this package is like to depend on

Last release 3 days ago

21 Aug 2026

Ships fairly regularly

a new release about every 2 weeks

Nearly every release is documented

notes for 250 of 250 stable releases

1 version withdrawn

withdrawn after publishing

3 years old

290 releases · first in 2023

77 releases in the last 12 months

see the full history below

Release timeline

290 releases · Jun 2023 to Aug 2026
2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 290
  1. 7.10.0 21 Aug 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    🚨 Breaking Changes

    • migrate widgets to flutter_material_design_icons (bb619e0 by @PHKenny, Anthropic Claude)
    • drop layrz_icons and require layrz_models ^3.31.0 (7d121d9 by @PHKenny, Anthropic Claude)

    📚 Documentation

    • document the icon migration and dependency floors (69bf55e by @PHKenny, Anthropic Claude)

    ♻️ Refactoring

    • source models from layrz_sdk (8116e64 by @PHKenny, Anthropic Claude)
    • migrate widgets to flutter_material_design_icons (bb619e0 by @PHKenny, Anthropic Claude)

    ✅ Tests

    • migrate icon assertions to MdiIcons (67d0224 by @PHKenny, Anthropic Claude)

    📊 Diff Stats

    Metric Count
    📄 Files changed 102
    🟢 Insertions $\color{green}\textsf{+390}$
    🔴 Deletions $\color{red}\textsf{-439}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • BREAKING: Removed the layrz_icons dependency. All icon references now use flutter_material_design_icons (MdiIcons) instead. The public API is unchanged — all icon parameters were already plain Flutter IconData (e.g., ThemedButton.icon), so widget signatures remain compatible. Apps that were relying on layrz_icons as a transitive dependency of layrz_theme must now declare it themselves, or migrate to MdiIcons.
    • ThemedIconPicker is unaffected and continues to work through the layrz_sdk icon bridge.
    • Note that the Solar icon set has been replaced with Material Design Icons, so many icons were remapped to their closest MDI equivalents. The most visually distinct changes: the WIP placeholder (lib/src/widgets/src/wip.dart) now uses MdiIcons.progressWrench (Solar's shock-absorber glyph has no MDI counterpart), the dark-mode toggle now uses MdiIcons.weatherNight (replacing Solar's moon-fog icon), and Solar's "alt arrow" icons (solarOutlineAltArrowDown, etc.) are now represented by MDI chevrons.
    • The example app has been migrated to use MdiRemapIcon from layrz_sdk for the icon picker, maintaining compatibility with the new icon bridge.
    • Updated layrz_sdk to ^4.4.4 which provides the MdiRemapIcon type for cross-package icon compatibility.
    • Dependency floor: Requires layrz_models: ^3.31.0 and layrz_sdk: ^4.4.4. Earlier versions of layrz_models (up to 3.30.0) depend on both layrz_icons: ^1.1.0 and layrz_sdk: ^4.4.3, which admits 4.4.4 — a combination that causes a type clash (MdiRemapIcon? cannot be assigned to LayrzIcon?) during test compilation. Version 3.31.0 removes the layrz_icons dependency, resolving the incompatibility. Consumers on older layrz_models versions must upgrade to 3.31.0 or later.
    Open source →
  2. 7.9.2 19 Aug 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    ⏪ Reverts

    📊 Diff Stats

    Metric Count
    📄 Files changed 6
    🟢 Insertions $\color{green}\textsf{+13}$
    🔴 Deletions $\color{red}\textsf{-50}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Reverted the input decoration changes introduced in 7.9.0. generateLightTheme and generateDarkTheme again render inputs with ThemedInputBorder instead of the explicit OutlineInputBorder set, and the errorStyle/floatingLabelStyle and tokenizer-based contentPadding added in 7.9.0 were removed. Fonts (kLayrzFont) and switch thumb icons are unaffected.
    Open source →
  3. 7.9.1 19 Aug 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    • No changes detected

    📊 Diff Stats

    Metric Count
    📄 Files changed 4
    🟢 Insertions $\color{green}\textsf{+32}$
    🔴 Deletions $\color{red}\textsf{-52}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Updated layrz_models to v3.27.2
    Open source →
  4. 7.9.0 11 Aug 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    🚨 Breaking Changes

    • source spacing, radius and colors from the tokenizer (fa796df by @PHKenny, Claude Opus 5)
    • use outlined input borders and add kLayrzFont default (ee7c05a by @PHKenny, Claude Opus 5)
    • add border width token, tonal opacity and nullable context (1629cc0 by @PHKenny, Claude Opus 5)

    ✨ Features

    • add ThemedSnackbarType and simplify combobox overlay (f132335 by @PHKenny, Claude Opus 5)
    • use outlined input borders and add kLayrzFont default (ee7c05a by @PHKenny, Claude Opus 5)
    • add border width token, tonal opacity and nullable context (1629cc0 by @PHKenny, Claude Opus 5)
    • add color, radius, shadow, and spacer extensions for consistent theming (a08d542 by @PHKenny)

    📚 Documentation

    ♻️ Refactoring

    • source spacing, radius and colors from the tokenizer (fa796df by @PHKenny, Claude Opus 5)

    📊 Diff Stats

    Metric Count
    📄 Files changed 35
    🟢 Insertions $\color{green}\textsf{+428}$
    🔴 Deletions $\color{red}\textsf{-191}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • BREAKING: Renamed LayrzTokenizer.spacer getter to spacing, spacerSize to spacingSize, and spacerBox to sizedBox. No deprecation shims were provided — these are hard renames.
    • BREAKING: Removed ShadowTokenizer.shadowColor getter. The shadow() method no longer forwards a shadowColor parameter to generateContainerElevation.
    • BREAKING: Changed LayrzTokenizer.ctx from non-nullable BuildContext to BuildContext?, and LayrzTokenizer.of() now accepts BuildContext?. This enables token access outside a widget tree (used by theme generators). Important caveat: context-dependent tokens like ColorTokenizer.primary and ShadowTokenizer.shadow() throw an Exception if ctx is null; constant tokens (padding, margin, radius, borderWidth, tonalOpacity, spacing, and semantic colors success/error/warning/info/context) are safe with a null context.
    • BREAKING: Changed ThemedAlertType.color from a getter (Color? get color) to a method taking a context (Color? color(BuildContext context)). It now resolves from the tokenizer's semantic colors instead of hardcoded Colors.blue/green/orange/red/grey.
    • BREAKING: Changed generateLightTheme and generateDarkTheme parameters: titleFont and bodyFont are now non-nullable AppFont defaulting to the new kLayrzFont constant; passing null is now a compile error.
    • BREAKING: Changed ThemedChip.borderRadius from double to double? and ThemedChipGroup.spacing from double to double?. They now fall back to the tokenizer (LayrzTokenizer.radius and LayrzTokenizer.spacing) when not supplied. Previously they defaulted to hardcoded values.
    • Added new BorderTokenizer extension with a borderWidth getter (defaults to 1.5).
    • Added ColorTokenizer.tonalOpacity getter (defaults to 0.2), replacing scattered hardcoded alpha values across widgets.
    • Added SpacerTokenizer.reducedMargin getter, computed as spacing / 2.
    • Added kLayrzFont constant exported from lib/src/theme/src/constants.dartAppFont(source: .google, name: 'Open Sans') — as the new default font for theme generation.
    • Added ThemedSnackbarType enum (custom, success, error, warning, info, context) and a new type parameter to ThemedSnackbar (defaults to .custom, preserving previous color-based behaviour). The messenger now resolves the background color through type.color(color).
    • Inputs now render with outlined borders in both light and dark themes. generateLightTheme and generateDarkTheme replaced the single border: ThemedInputBorder() with explicit focusedBorder, enabledBorder, errorBorder, and focusedErrorBorder (all OutlineInputBorder with a 10px radius and tokenizer borderWidth). Both themes also gained errorStyle (bold, tokenizer error color) and floatingLabelStyle (bold; primary color in light, grey in dark).
    • Fixed RadiusTokenizer.innerRadius to clamp the computed radius to a minimum of 0 (max(innerRadius, 0)), preventing a negative radius when spacer exceeds outerRadius.
    • Changed ThemedSnackbar.duration default from 5 seconds to 10 seconds.
    • Updated switch thumb icons in both themes to LayrzIcons.mdiCheck / LayrzIcons.mdiClose at size 14 (were the Solar check/close circle and square icons).
    • Simplified ThemedTextInput combobox overlay: removed Dividers and the surrounding Column/Expanded wrapper; the overlay now uses the tokenizer border radius instead of computing top/bottom-only corners from entry position. Removed hardcoded underline/outline border computation, so the input now inherits the theme's border. Hint style now uses a lighter grey in dark mode. When there are validation errors, the floating label is tinted with the tokenizer error color.
    • Migrated many widgets off hardcoded values onto the tokenizer: ThemedAlert, ThemedAlertIcon, ThemedButton, ThemedChip, ThemedChipGroup, ThemedMiniBar, ThemedSidebar, and ThemedAppBarAvatar now use LayrzTokenizer for padding, margins, border radius, border width, and tonal opacity. ThemedButton semantic factories (.save, .cancel, .info, .show, .edit, .delete) now use tokenizer semantic colors instead of hardcoded Colors.green/red/blue/orange.
    • Updated ThemedMiniBar to use the tokenizer shadow() decoration and add an outer margin; separators changed from dotted style to the default line style; item highlight radius now derives from LayrzTokenizer.innerRadius.
    • Updated ThemedAppBarAvatar to derive the avatar radius from the tokenizer instead of the avatarRadius property (the property is still accepted but is currently ignored).
    • Deprecated ThemedTextInput.borderRadius and the ThemedTextInput.outerPadding static getter in favour of the tokenizer. Both still work in this release.
    Open source →
  5. 7.8.0 30 Jul 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    ✨ Features

    📊 Diff Stats

    Metric Count
    📄 Files changed 9
    🟢 Insertions $\color{green}\textsf{+243}$
    🔴 Deletions $\color{red}\textsf{-9}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Added isScrollable and tabAlignment to ThemedTabView. isScrollable defaults to true, which keeps the previous behaviour: every tab takes only the width of its own content and the bar scrolls when the tabs do not fit. Passing isScrollable: false makes the tabs share the available width evenly, filling the space left by additionalWidgets and the arrow buttons. tabAlignment is null by default and resolves to TabAlignment.start when scrollable and TabAlignment.fill when not; set it explicitly only when the value matches isScrollable, since Flutter accepts .start/.startOffset only on a scrollable bar and .fill/.center only on a non-scrollable one. Both values were previously hardcoded, so there was no way to make the tabs span the full width.
    • Fixed the active tab background not covering the whole tab cell when isScrollable: false. The decorated container sized itself to the label while the ink splash always covers the cell the TabBar assigned, so the splash painted a visibly larger area than the highlight. ThemedTab now takes an expand flag — set by ThemedTabView through overrideStyle, and only when the bar is not scrollable — that stretches the container to fill its cell and centers the label. Scrollable bars are unaffected: they lay tabs out with unbounded width, where expanding would throw BoxConstraints forces an infinite width.
    • ThemedTab.overrideStyle gained an optional expand parameter. The method is used internally by ThemedTabView; existing calls keep working unchanged.
    Open source →
  6. 7.7.0 29 Jul 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    ✨ Features

    🐛 Bug Fixes

    📊 Diff Stats

    Metric Count
    📄 Files changed 8
    🟢 Insertions $\color{green}\textsf{+91}$
    🔴 Deletions $\color{red}\textsf{-20}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Added textInputAction to ThemedTextInput, passed through to the underlying TextField. It lets a form declare the keyboard's action key, e.g. TextInputAction.next so the key advances to the next field instead of showing the platform default.
    • Update layrz_model
    Open source →
  7. 7.6.0 22 Jun 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    ✨ Features

    • migrate to layrz_icons ^1.1.0 and raise SDK constraints (5c0c19c by @PHKenny, Claude Opus 4.8)

    👷 CI/CD

    🔧 Other

    • update skills and migration docs for layrz_icons ^1.1.0 renames (29ebc2f by @PHKenny, Claude Opus 4.8)

    📊 Diff Stats

    Metric Count
    📄 Files changed 34
    🟢 Insertions $\color{green}\textsf{+811}$
    🔴 Deletions $\color{red}\textsf{-686}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Bumped layrz_icons to ^1.1.0, which renames several Solar icon constants, and updated all internal usages to match (e.g. solarOutlineMagnifiersolarOutlineMagnifer, solarOutlineTrashBinMinimalistic2solarOutlineTrashBinMinimalisticN2, solarOutlinePalette2solarOutlinePalette). Consumers passing the renamed constants directly will need to update their references.
    • Raised minimum SDK constraints to Dart >=3.12.0 and Flutter >=3.44.0.
    Open source →
  8. 7.5.34 09 Jun 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    🐛 Bug Fixes

    📊 Diff Stats

    Metric Count
    📄 Files changed 3
    🟢 Insertions $\color{green}\textsf{+7}$
    🔴 Deletions $\color{red}\textsf{-1}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Fixed use of flutter_map TileLayer in ThemedTileLayer to use userAgentPackageName of browser as default to allow use of Open Street Map on mobile apps.
    Open source →
  9. 7.5.33 28 May 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    🐛 Bug Fixes

    • preserve horizontal layout in ResponsiveRow when spacing is greater than zero (e6313ee by @ManuelRomeroA)

    📊 Diff Stats

    Metric Count
    📄 Files changed 16
    🟢 Insertions $\color{green}\textsf{+1026}$
    🔴 Deletions $\color{red}\textsf{-85}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • fix: preserve horizontal layout in ResponsiveRow when spacing > 0 and child gridSizes sum to 12 (e.g., two col6, three col4). Render path now uses a single LayoutBuilder with explicit per-row sizing; public API unchanged.
    • behavior note: when spacing > 0, each child's pixel width is now computed as (totalWidth - spacing * (n - 1)) / 12 * gridSize (where n is the number of children in that row). Previously each child computed its width as totalWidth / 12 * gridSize ignoring spacing, which caused the wrap bug. Consumers with golden tests or pixel-perfect layouts that use spacing > 0 may see small width differences (e.g. 500px → 494px for a col6 with spacing: 12 and two children). Layouts with spacing: 0 are pixel-identical to previous versions.
    • internal: ResponsiveCol.build now returns child directly (no inner LayoutBuilder); breakpoint resolution is delegated to the parent ResponsiveRow via the new package-internal accessor ResponsiveCol.gridSizeAt(double rowWidth). ResponsiveCol was always documented as a child of ResponsiveRow; standalone usage was never supported.
    • example: added a dedicated ResponsiveRowShowcaseView at /grid/responsive-row with 8 interactive cases (basic two-column, three-column with tunable spacing via ThemedNumberInput, mixed grids, full responsive reflow, vertical gap, builder, form layout, and crossAxisAlignment toggle). Accessible from the sidebar and the home view.
    • skills: updated responsive-row and responsive-col skills with the post-7.5.33 render path, the per-row width formula, the row-grouping algorithm, and the new gridSizeAt accessor.
    Open source →
  10. 7.5.32 15 May 2026
    Release notes

    📋 Release Notes

    This release includes the following changes:

    ✨ Features

    📝 Changes

    📊 Diff Stats

    Metric Count
    📄 Files changed 7
    🟢 Insertions $\color{green}\textsf{+69}$
    🔴 Deletions $\color{red}\textsf{-2}$

    🤖 Auto-generated by changelog workflow

    Open source →
    Release notes
    • Added onSort, onSearch and search to ThemedTable2Controller to allow programmatic control of sorting and searching, and to expose the current search query.
    Open source →
  11. 7.5.31 12 May 2026
    Release notes
    • Fixed ThemedDateTimeRangePicker swapped times when the date range was picked in reverse order: selecting the later date first and the earlier date second caused the times entered in the Time tab to be glued to the wrong endpoint, because startDate/endDate were left in selection order while only the final save sorted the resulting DateTimes. The dialog now sorts startDate/endDate the moment the second tap closes the range, so the Time tab always shows "Start" for the earlier day and "End" for the later one and the returned [start, end] list keeps each time aligned with its intended date.
    Open source →
  12. 7.5.30 29 Apr 2026
    Release notes
    • Fixed incorrect deprecation of ThemedTableAvatar: the class is used by ThemedScaffoldView.avatarBuilder in the scaffolds module and is not exclusive to ThemedTable. Consumers using ThemedScaffoldView were receiving a false deprecated_member_use warning.
    • Fixed incorrect deprecation of CellTap<T>: the typedef is used by ThemedColumn2.onTap in ThemedTable2 and must remain public and non-deprecated while ThemedTable2 depends on it.
    Open source →
  13. 7.5.29 29 Apr 2026
    Release notes
    • Added onFilteredCountChanged: void Function(int count)? to ThemedTable2<T>. The callback fires after every filter-and-sort cycle (initial load, search, sort, items update) with the count of currently visible rows. Optional and null by default — fully backward-compatible.
    • Restored prefixIcon parameter in ThemedColorPicker as @Deprecated. The parameter was removed in 7.5.27 but is still referenced in downstream packages. It is now accepted (and ignored) to restore build compatibility while consumers migrate.
    Open source →
  14. 7.5.28 24 Apr 2026
    Release notes
    • Deprecated ThemedTable, ThemedColumn, ThemedTableAction, ThemedTableAvatar, and related typedefs (ValueBuilder, WidgetBuilder, CellTap, CellColor, ValueBuilder2, kThemedTableCanTrue). Use ThemedTable2 instead. All symbols will be removed in version 8.0.0.
    • Fixed ResponsiveRow spacing on vertical layouts: spacing now applies to both horizontal gaps between columns and vertical gaps between wrapped rows (Wrap.runSpacing). Previously, spacing had no effect when columns stacked vertically on mobile (xs: .col12).
    Open source →
  15. 7.5.27 22 Apr 2026
    Release notes
    • Fixed ThemedColorPicker double # prefix bug: .hex extension already includes #, so the controller text was displaying ##RRGGBB instead of #RRGGBB.
    • Fixed ThemedColorPicker memory leak: TextEditingController is now properly disposed in dispose().
    • Fixed ThemedColorPicker external value not reflected: added didUpdateWidget to sync _value and controller text when the parent passes a new value prop.
    • Fixed ThemedColorPicker duplicate dialog buttons: ColorPickerActionButtons had dialogActionButtons: true while a manual Row with ThemedButton.cancel/ThemedButton.save was also rendered below; set dialogActionButtons: false to use only the Layrz-themed buttons.
    • Fixed ThemedColorPicker assertion: replaced (label == null && labelText != null) || (label != null && labelText == null) with XOR logic (label == null) != (labelText == null) and added a descriptive error message.
    • Fixed ThemedColorPicker doc comments misalignment: onChanged, value, and disabled fields had their comments shifted by two fields.
    • Removed ThemedColorPicker unused prefixIcon parameter: the prefix is always a color swatch and cannot be replaced with an icon.
    • Improved ThemedColorPicker placeholder forwarding: the parameter was declared but never passed to ThemedTextInput.
    • Improved ThemedColorPicker dense and padding forwarding: ThemedTextInput now receives values through the isDense and widgetPadding getters.
    • Improved ThemedColorPicker method signature: _showPicker is now Future<void> instead of void async.
    • Added comprehensive widget tests for ThemedColorPicker covering: rendering (label, hex display, kPrimaryColor fallback, color swatch), disabled state (dialog does not open), and lifecycle (dispose without leak, repeated mount/unmount, didUpdateWidget updates field on external value change, resets to kPrimaryColor on null, handles same-value rebuild without crash).
    • Added ThemedColorPicker skill documentation with parameter reference, ColorPickerType values, usage examples, form integration patterns, and Color extension helpers.
    Open source →
  16. 7.5.26 07 Apr 2026
    Release notes
    • Fixed ThemedNumberInput memory leak: TextEditingController is now properly disposed in dispose().
    • Fixed ThemedNumberInput inputRegExp parameter being silently ignored: the custom regex is now applied to the FilteringTextInputFormatter when provided, honoring the existing assertion that requires it when format is set.
    • Fixed ThemedNumberInput unsafe onChanged call when format.tryParse() returns null: unparseable input is now silently ignored and the last valid value is preserved, preventing null from being emitted for intermediate typed states.
    • Fixed ThemedNumberInput cursor position after step button tap: cursor now moves to the end of the formatted number after increment/decrement, instead of staying at the previous offset (which caused cursor to land mid-number when digit count changed, e.g. 9→10, 99→100, 999→1,000).
    • Fixed ThemedNumberInput doc comments misalignment: placeholder, onChanged, value, and disabled fields had their comments shifted by one field due to a copy-paste error.
    • Improved ThemedNumberInput _regex allocation: moved from a getter (new RegExp instance per access) to a static final field.
    • Improved ThemedNumberInput step button UX: buttons now show 0.4 opacity and ignore taps when the next step would exceed minimum or maximum, providing clear visual feedback at boundaries.
    • Added prefixIconDisabled and suffixIconDisabled parameters to ThemedTextInput: when true, the respective icon renders at 0.4 opacity and its InkWell tap is suppressed, enabling disabled visual states for icon buttons without hiding them.
    • Added comprehensive widget tests for ThemedNumberInput covering: rendering (label, initial value, null value, suffixText, prefixText, isRequired, errors, hideDetails), onChanged via keyboard (parsed value, clear→null, lone minus sign, unparseable input, negative numbers), step buttons (increment, decrement, default step, null value start, boundary enforcement at min/max, hidden when hidePrefixSuffixActions or disabled), cursor position after step (9→10, 99→100, 10→9, 999→1,000 regressions), decimal separators (dot and comma locale formatting), and lifecycle (mount/unmount without errors, repeated cycles, controller text clears on null value).
    • Updated ThemedNumberInput example showcase with sections covering: basic usage, prefix/suffix text, decimal separators side-by-side, step controls with min/max boundary feedback, dense/disabled/error/hideDetails states, isRequired indicator, and hidePrefixSuffixActions mode.
    Open source →
  17. 7.5.25 07 Apr 2026
    Release notes
    • Added the firstDay and lastDay parameters to ThemedCalendar to allow setting a date range for the picker, preventing selection of dates outside the specified range.
    • The firstDay and lastDay parameters are now supported in ThemedDateRangePicker, ThemedDatePicker, ThemedDateTimeRangePicker, ThemedDateTimeSteppedPicker and ThemedDateTimePicker.
    Open source →
  18. 7.5.24 04 Apr 2026
    Release notes
    • Fixed ThemedTable2 silent update loss for mid-list edits: reverted didUpdateWidget heuristic back to DeepCollectionEquality — the heuristic (identical + length + first element) missed edits to non-first elements in same-length lists; with Freezed value-equality objects the O(n) cost is negligible in practice (~4 of 170 telemetry updates actually triggered a reload in production profiling).
    • Removed ThemedTable2 update throttle: the throttle introduced in 7.5.22 blocked CRUD operations for up to 30 seconds at trailing-edge; the root performance problem (constant reloads) was already solved by the DeepCollectionEquality equality check, making the throttle unnecessary complexity.
    • Added ThemedTable2 regression test: didUpdateWidget now verifies that editing a middle element of a same-length list (same length, same first element) correctly triggers a table reload.
    Open source →
  19. 7.5.23 29 Mar 2026
    Release notes
    • Fixed ThemedTabView debugPrint statement left in production code.
    • Fixed ThemedTabView initialPosition validation: out-of-bounds indices are now clamped to valid range instead of potentially crashing TabController.
    • Fixed ThemedTabView unnecessary setState() calls in arrow button handlers: TabController.animateTo() already notifies listeners.
    • Fixed ThemedTabView arrow button disabling state not updating during navigation: setState() now called unconditionally when tab index changes, ensuring arrow disabled state reflects current position even without onTabIndex callback.
    • Improved ThemedTabView tab active-state detection: color comparison now includes alpha channel for more accurate active state handling.
    • Improved ThemedTabView code quality: extracted magic numbers to named constants (_kTabBorderRadius, _kArrowButtonHeight, _kAdditionalWidgetsSpacing, _kTabAnimationDuration).
    • Added wrapArrowNavigation parameter to ThemedTabView for circular tab navigation: when true, left arrow from first tab goes to last tab and right arrow from last tab goes to first tab; when false (default), arrows are disabled at boundaries.
    • Added comprehensive widget tests for ThemedTabView covering: rendering, tab switching via tap, onTabIndex callback firing, arrow button navigation, initialPosition clamping, persistTabPosition behavior, additional widgets, different tab styles, leading/trailing icons, custom padding and alignment, arrow button state reactivity during navigation (regression test), and wrapArrowNavigation behavior (wrap first→last, wrap last→first, arrows always enabled at boundaries).
    • Added ThemedTabView skill documentation with parameter reference, usage examples, gotchas, best practices, and testing patterns.
    • Added comprehensive widget tests for ResponsiveRow covering: basic rendering, empty children, single child, spacing parameter (0 and custom values), main/cross axis alignment, full-width enforcement, ResponsiveRow.builder with various item counts, and integration tests with ResponsiveCol.
    • Added comprehensive widget tests for ResponsiveCol covering: child rendering, breakpoint fallback logic (xs default, sm/md/lg/xl optional), LayoutBuilder usage, and child widget preservation.
    • Added widget tests for Sizes enum covering: gridSize calculations for all column variants, boxWidth calculations at various container widths, and validation of size constraints.
    • Added ResponsiveRow and ResponsiveCol skill documentation with parameter reference, breakpoint logic, responsive behavior examples, gotchas (fallback chain, LayoutBuilder dynamics, width calculations), best practices, and common layout patterns (sidebar + content, card grid, responsive forms).
    Open source →
  20. 7.5.22 28 Mar 2026
    Release notes
    • Fixed ThemedTable2 column key collision in _itemsStrings: inner key now uses column index instead of col.hashCode, preventing silent data corruption when two columns share the same headerText.
    • Fixed ThemedTable2 silent update loss: updates arriving while loading are now queued via _pendingUpdate flag and processed once the current operation completes.
    • Fixed ThemedTable2 unsendable closure crash: sort keys are now precomputed on the main thread before compute(), ensuring valueBuilder closures that capture BuildContext or i18n objects never cross the isolate boundary.
    • Improved ThemedTable2 multiselect performance: introduced an internal Set<T> mirroring _selectedItems for O(1) contains() lookups instead of O(n) on the backing List<T>.
    • Improved ThemedTable2 didUpdateWidget performance: replaced DeepCollectionEquality (O(n)) with a fast O(1) heuristic using identical + length check.
    • Removed all debugPrint statements from ThemedTable2._filterAndSort (startup, precompute, sort, finish, queue logs).
    • Added widget tests for ThemedTable2 covering: renders item values after compute completes, shows loading indicator while computing, renders without errors on empty dataset, column key collision regression (two columns with identical headerText show distinct data), search filters by matching query, search matches values from all columns, search restores all items when cleared, controller.sort ascending (A→Z), controller.sort descending (Z→A), numeric sort as numbers not strings, controller.refresh preserves sort order, didUpdateWidget reflects new items on rebuild, didUpdateWidget handles growing list without losing existing rows.
    • Add ThemedTable2 skill.
    Open source →
  21. 7.5.21 28 Mar 2026
    Release notes
    • Add claudio Skills
    Open source →
  22. 7.5.20 24 Mar 2026
    Release notes
    • Fixed ThemedTable2 header overflow detection by including the sort icon width in the available text width, ensuring tooltips appear correctly.
    Open source →
  23. 7.5.19 24 Mar 2026
    Release notes
    • Add ThemedTooltip to headers of ThemedTable2 for better overflow handling
    Open source →
  24. 7.5.18 21 Mar 2026
    Release notes
    • Added mapboxCustomStyleId and mapboxCustomUsername to ThemedTileLayer to support custom Mapbox styles.
    Open source →
  25. 7.5.17 04 Mar 2026
    Release notes
    • Updated attributions on ThemedTileLayer for OpenStreetMaps.
    Open source →
  26. 7.5.16 28 Feb 2026
    Release notes
    • Native support for TZDateTime on Date and DateTime pickers.
    Open source →
  27. 7.5.15 24 Feb 2026
    Release notes
    • Adjusted ThemedDateTimeSteppedPicker to call the onChanged method only once after the time is selected.
    Open source →
  28. 7.5.14 19 Feb 2026
    Release notes
    • Created ThemedDateTimeSteppedPicker widget for a stepped date and time picking experience, allowing users to select date first and then time
    Open source →
  29. 7.5.13 13 Feb 2026
    Release notes
    • Added autofillHints parameter to ThemedPasswordInput to improve browser password manager integration with default values for new and existing password fields.
    • Improved CI/CD pipeline with automated GitHub release changelog generation using conventional commits.
    Open source →
  30. 7.5.12 13 Feb 2026
    Release notes
    • Updated url_launcher_android dependency to ^6.3.28 to support latest Android features and improvements.
    Open source →
  31. 7.5.11 11 Feb 2026
    Release notes
    • Improved ThemedPasswordInput requirements validation logic to use .entries for cleaner iteration and better performance.
    Open source →
  32. 7.5.10 11 Feb 2026
    Release notes
    • Renamed tools/ to tool/ as suggestion of the Dart team to follow the standard convention for Dart CLI tools.
    Open source →
  33. 7.5.8 29 Jan 2026
    Release notes
    • Upgraded google_fonts dependency to ^8.0.0 to support latest font features and improvements.
    Open source →
  34. 7.5.7 21 Jan 2026
    Release notes
    • Added focusNode prop to ThemedNumberInput to allow external focus node management.
    Open source →
  35. 7.5.6 16 Jan 2026
    Release notes
    • Add onLongPress with customLongPressDuration in ThemedButton
    Open source →
  36. 7.5.5 15 Jan 2026
    Release notes
    • Added itemsLength parameter to deleteConfirmationDialog utility to show the number of items being deleted in the confirmation dialog.
    Open source →
  37. 7.5.4 15 Jan 2026
    Release notes
    • Critical fix on ThemedTable2 Select All checkbox, fixed an issue where selecting all items selected everything avaiable even when filtering with the search bar.
    Open source →
  38. 7.5.3 16 Dec 2025
    Release notes
    • Changed customSort signature on ThemedColumn2 to include the ascending parameter to allow more complex sorting algorithms.
    Open source →
  39. 7.5.2 06 Dec 2025
    Release notes
    • Fixed ThemedMapToolbar zoom in and zoom out buttons doing the opposite action.
    Open source →
  40. 7.5.1 05 Dec 2025
    Release notes
    • Fixed ThemedTable2 search debounce not working as expected.
    Open source →
  41. 7.5.0 28 Nov 2025
    Release notes
    • Updated constraint of Dart SDK to >=3.10.0 <4.0.0
    • Updated constraint of Flutter SDK to >=3.38.0
    • Dot shorthands everywhere!
    • Added ThemedTable2Controller to handle programmatically sorting, filtering and refreshing the table data.
    • Added debounce property to ThemedSearchInput to handle debounced search inputs.
    • Improvements over ThemedImage base64 caching to prevent memory leaks.
    • Updated ThemedChip to support more styles and configurations.
    • New ThemedChipStyle enum to define the style of the ThemedChip.
    • New ThemedChipGroup widget to handle groups of chips with selection support.
    • Optimizations on ThemedTable2 to improve performance when handling large datasets.
    • Bypassed limitations of Isolate on ThemedTable2 when using complex objects as items, the workaround is to use the isolateSafety property on ThemedColumn2 to define a function that returns a primitive type from the item to be used on sorting and filtering instead of the full object.
    Open source →
  42. 7.5.0+1 28 Nov 2025
    Release notes
    • Hotfix regarding of a bug on ThemedTable2 where the loading indicator was not being removed after filtering and sorting when the items list is empty.
    Open source →
  43. 7.5.0-rc1 17 Nov 2025 pre-release

    Nothing published for this version

  44. 7.5.0-prerelease2 17 Nov 2025 pre-release

    Nothing published for this version

  45. 7.5.0-prerelease1 17 Nov 2025 pre-release

    Nothing published for this version

  46. 7.5.0-beta4 14 Nov 2025 pre-release

    Nothing published for this version

  47. 7.5.0-beta3 14 Nov 2025 pre-release

    Nothing published for this version

  48. 7.5.0-beta2 14 Nov 2025 pre-release

    Nothing published for this version

  49. 7.5.0-beta1 14 Nov 2025 pre-release

    Nothing published for this version

  50. 7.4.12 12 Nov 2025
    Release notes
    • Changed ThemedButton loading and disabled behavior to use the original coloring of the button style instead of from context.
    Open source →
  51. 7.4.11 06 Nov 2025
    Release notes
    • Added padding prop to ThemedDateTimePicker to handle the padding of the input field.
    Open source →
  52. 7.4.10 06 Nov 2025
    Release notes
    • New ThemedTabStyle enum to define the style of the ThemedTabView tabs.
    Open source →
  53. 7.4.9 06 Nov 2025
    Release notes
    • Add additionalWidgets in ThemedTabView.
    Open source →
  54. 7.4.8 03 Nov 2025
    Release notes
    • Updated design of ThemedButton to support new styling when loading or in cooldown.
    • Added factory on ThemedButton.legacyLoading to support the previous loading design.
    Open source →
  55. 7.4.7 30 Oct 2025
    Release notes
    • Added customConfirm and customDismiss parameters to the deleteConfirmationDialog utility.
    Open source →
  56. 7.4.6 27 Oct 2025
    Release notes
    • Fixed an issue with the ThemedTable2 where the filtering was not working correctly after the last changes.
    • Changed behavior on dispose() on ThemedTextInput to only dispose the internal controller and focus node when they are not provided externally.
    Open source →
  57. 7.4.6+1 27 Oct 2025
    Release notes
    • Fix on filtering items on ThemedTable2 when it's empty.
    Open source →
  58. 7.4.5 24 Oct 2025
    Release notes
    • Added initialPosition and onTabIndex in ThemedTabView
    Open source →
  59. 7.4.4 24 Oct 2025
    Release notes
    • Solved extremely weird bug using the ThemedTable2, now creates a copy of the items list to prevent issues when filtering and sorting the data. (Discovered by @ManuelRomeroA)
    Open source →
  60. 7.4.3 17 Oct 2025
    Release notes
    • Added ThemedTable2OnTapBehavior enum to define the default behavior of onTap events on table cells.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive