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 2026Releases
latest 60 of 290-
7.10.021 Aug 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
🚨 Breaking Changes
- migrate widgets to flutter_material_design_icons (
bb619e0by @PHKenny, Anthropic Claude) - drop layrz_icons and require layrz_models ^3.31.0 (
7d121d9by @PHKenny, Anthropic Claude)
📚 Documentation
♻️ Refactoring
- source models from layrz_sdk (
8116e64by @PHKenny, Anthropic Claude) - migrate widgets to flutter_material_design_icons (
bb619e0by @PHKenny, Anthropic Claude)
✅ Tests
📊 Diff Stats
Metric Count 📄 Files changed 102 🟢 Insertions $\color{green}\textsf{+390}$ 🔴 Deletions $\color{red}\textsf{-439}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- BREAKING: Removed the
layrz_iconsdependency. All icon references now useflutter_material_design_icons(MdiIcons) instead. The public API is unchanged — all icon parameters were already plain FlutterIconData(e.g.,ThemedButton.icon), so widget signatures remain compatible. Apps that were relying onlayrz_iconsas a transitive dependency oflayrz_thememust now declare it themselves, or migrate toMdiIcons. ThemedIconPickeris unaffected and continues to work through thelayrz_sdkicon 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 usesMdiIcons.progressWrench(Solar's shock-absorber glyph has no MDI counterpart), the dark-mode toggle now usesMdiIcons.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
MdiRemapIconfromlayrz_sdkfor the icon picker, maintaining compatibility with the new icon bridge. - Updated
layrz_sdkto^4.4.4which provides theMdiRemapIcontype for cross-package icon compatibility. - Dependency floor: Requires
layrz_models: ^3.31.0andlayrz_sdk: ^4.4.4. Earlier versions oflayrz_models(up to 3.30.0) depend on bothlayrz_icons: ^1.1.0andlayrz_sdk: ^4.4.3, which admits 4.4.4 — a combination that causes a type clash (MdiRemapIcon?cannot be assigned toLayrzIcon?) during test compilation. Version 3.31.0 removes thelayrz_iconsdependency, resolving the incompatibility. Consumers on olderlayrz_modelsversions must upgrade to 3.31.0 or later.
- migrate widgets to flutter_material_design_icons (
-
7.9.219 Aug 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
⏪ Reverts
- restore ThemedInputBorder in generateLightTheme and generateDarkTheme (
d706c9fby @ManuelRomeroA) - restore ThemedInputBorder in generateLightTheme and generateDarkTheme (
2d3d5e2by @ManuelRomeroA)
📊 Diff Stats
Metric Count 📄 Files changed 6 🟢 Insertions $\color{green}\textsf{+13}$ 🔴 Deletions $\color{red}\textsf{-50}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- Reverted the input decoration changes introduced in 7.9.0.
generateLightThemeandgenerateDarkThemeagain render inputs withThemedInputBorderinstead of the explicitOutlineInputBorderset, and theerrorStyle/floatingLabelStyleand tokenizer-basedcontentPaddingadded in 7.9.0 were removed. Fonts (kLayrzFont) and switch thumb icons are unaffected.
- restore ThemedInputBorder in generateLightTheme and generateDarkTheme (
-
7.9.119 Aug 2026Release notes
Open source →📋 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
-
7.9.011 Aug 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
🚨 Breaking Changes
- source spacing, radius and colors from the tokenizer (
fa796dfby @PHKenny, Claude Opus 5) - use outlined input borders and add kLayrzFont default (
ee7c05aby @PHKenny, Claude Opus 5) - add border width token, tonal opacity and nullable context (
1629cc0by @PHKenny, Claude Opus 5)
✨ Features
- add ThemedSnackbarType and simplify combobox overlay (
f132335by @PHKenny, Claude Opus 5) - use outlined input borders and add kLayrzFont default (
ee7c05aby @PHKenny, Claude Opus 5) - add border width token, tonal opacity and nullable context (
1629cc0by @PHKenny, Claude Opus 5) - add color, radius, shadow, and spacer extensions for consistent theming (
a08d542by @PHKenny)
📚 Documentation
♻️ Refactoring
📊 Diff Stats
Metric Count 📄 Files changed 35 🟢 Insertions $\color{green}\textsf{+428}$ 🔴 Deletions $\color{red}\textsf{-191}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- BREAKING: Renamed
LayrzTokenizer.spacergetter tospacing,spacerSizetospacingSize, andspacerBoxtosizedBox. No deprecation shims were provided — these are hard renames. - BREAKING: Removed
ShadowTokenizer.shadowColorgetter. Theshadow()method no longer forwards ashadowColorparameter togenerateContainerElevation. - BREAKING: Changed
LayrzTokenizer.ctxfrom non-nullableBuildContexttoBuildContext?, andLayrzTokenizer.of()now acceptsBuildContext?. This enables token access outside a widget tree (used by theme generators). Important caveat: context-dependent tokens likeColorTokenizer.primaryandShadowTokenizer.shadow()throw anExceptionifctxis null; constant tokens (padding,margin,radius,borderWidth,tonalOpacity,spacing, and semantic colorssuccess/error/warning/info/context) are safe with a null context. - BREAKING: Changed
ThemedAlertType.colorfrom 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 hardcodedColors.blue/green/orange/red/grey. - BREAKING: Changed
generateLightThemeandgenerateDarkThemeparameters:titleFontandbodyFontare now non-nullableAppFontdefaulting to the newkLayrzFontconstant; passingnullis now a compile error. - BREAKING: Changed
ThemedChip.borderRadiusfromdoubletodouble?andThemedChipGroup.spacingfromdoubletodouble?. They now fall back to the tokenizer (LayrzTokenizer.radiusandLayrzTokenizer.spacing) when not supplied. Previously they defaulted to hardcoded values. - Added new
BorderTokenizerextension with aborderWidthgetter (defaults to1.5). - Added
ColorTokenizer.tonalOpacitygetter (defaults to0.2), replacing scattered hardcoded alpha values across widgets. - Added
SpacerTokenizer.reducedMargingetter, computed asspacing / 2. - Added
kLayrzFontconstant exported fromlib/src/theme/src/constants.dart—AppFont(source: .google, name: 'Open Sans')— as the new default font for theme generation. - Added
ThemedSnackbarTypeenum (custom,success,error,warning,info,context) and a newtypeparameter toThemedSnackbar(defaults to.custom, preserving previous color-based behaviour). The messenger now resolves the background color throughtype.color(color). - Inputs now render with outlined borders in both light and dark themes.
generateLightThemeandgenerateDarkThemereplaced the singleborder: ThemedInputBorder()with explicitfocusedBorder,enabledBorder,errorBorder, andfocusedErrorBorder(allOutlineInputBorderwith a 10px radius and tokenizerborderWidth). Both themes also gainederrorStyle(bold, tokenizererrorcolor) andfloatingLabelStyle(bold; primary color in light, grey in dark). - Fixed
RadiusTokenizer.innerRadiusto clamp the computed radius to a minimum of0(max(innerRadius, 0)), preventing a negative radius whenspacerexceedsouterRadius. - Changed
ThemedSnackbar.durationdefault from 5 seconds to 10 seconds. - Updated switch thumb icons in both themes to
LayrzIcons.mdiCheck/LayrzIcons.mdiCloseat size 14 (were the Solar check/close circle and square icons). - Simplified
ThemedTextInputcombobox overlay: removedDividers and the surroundingColumn/Expandedwrapper; 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 tokenizererrorcolor. - Migrated many widgets off hardcoded values onto the tokenizer:
ThemedAlert,ThemedAlertIcon,ThemedButton,ThemedChip,ThemedChipGroup,ThemedMiniBar,ThemedSidebar, andThemedAppBarAvatarnow useLayrzTokenizerfor padding, margins, border radius, border width, and tonal opacity.ThemedButtonsemantic factories (.save,.cancel,.info,.show,.edit,.delete) now use tokenizer semantic colors instead of hardcodedColors.green/red/blue/orange. - Updated
ThemedMiniBarto use the tokenizershadow()decoration and add an outer margin; separators changed from dotted style to the default line style; item highlight radius now derives fromLayrzTokenizer.innerRadius. - Updated
ThemedAppBarAvatarto derive the avatar radius from the tokenizer instead of theavatarRadiusproperty (the property is still accepted but is currently ignored). - Deprecated
ThemedTextInput.borderRadiusand theThemedTextInput.outerPaddingstatic getter in favour of the tokenizer. Both still work in this release.
- source spacing, radius and colors from the tokenizer (
-
7.8.030 Jul 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
✨ Features
- add isScrollable and tabAlignment to ThemedTabView (
d227d08by @ManuelRomeroA)
📊 Diff Stats
Metric Count 📄 Files changed 9 🟢 Insertions $\color{green}\textsf{+243}$ 🔴 Deletions $\color{red}\textsf{-9}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- Added
isScrollableandtabAlignmenttoThemedTabView.isScrollabledefaults totrue, 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. PassingisScrollable: falsemakes the tabs share the available width evenly, filling the space left byadditionalWidgetsand the arrow buttons.tabAlignmentisnullby default and resolves toTabAlignment.startwhen scrollable andTabAlignment.fillwhen not; set it explicitly only when the value matchesisScrollable, since Flutter accepts.start/.startOffsetonly on a scrollable bar and.fill/.centeronly 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 theTabBarassigned, so the splash painted a visibly larger area than the highlight.ThemedTabnow takes anexpandflag — set byThemedTabViewthroughoverrideStyle, 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 throwBoxConstraints forces an infinite width. ThemedTab.overrideStylegained an optionalexpandparameter. The method is used internally byThemedTabView; existing calls keep working unchanged.
- add isScrollable and tabAlignment to ThemedTabView (
-
7.7.029 Jul 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
✨ Features
- expose textInputAction on ThemedTextInput (
8a27964by @ManuelRomeroA)
🐛 Bug Fixes
- ensure artifact-name is set correctly in check-dart action (
6368966by @PHKenny) - update pubspec.lock and pubspec.yaml for dependency resolution (
4f748afby @ManuelRomeroA) - update layrz_models dependency to version ^3.18.2 (
111c1b3by @ManuelRomeroA) - on example fixed placeholder having regex (
87eeeacby @LuisReyes98)
📊 Diff Stats
Metric Count 📄 Files changed 8 🟢 Insertions $\color{green}\textsf{+91}$ 🔴 Deletions $\color{red}\textsf{-20}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- Added
textInputActiontoThemedTextInput, passed through to the underlyingTextField. It lets a form declare the keyboard's action key, e.g.TextInputAction.nextso the key advances to the next field instead of showing the platform default. - Update
layrz_model
- expose textInputAction on ThemedTextInput (
-
7.6.022 Jun 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
✨ Features
👷 CI/CD
🔧 Other
- update skills and migration docs for layrz_icons ^1.1.0 renames (
29ebc2fby @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
Release notes
Open source →- Bumped
layrz_iconsto^1.1.0, which renames several Solar icon constants, and updated all internal usages to match (e.g.solarOutlineMagnifier→solarOutlineMagnifer,solarOutlineTrashBinMinimalistic2→solarOutlineTrashBinMinimalisticN2,solarOutlinePalette2→solarOutlinePalette). Consumers passing the renamed constants directly will need to update their references. - Raised minimum SDK constraints to Dart
>=3.12.0and Flutter>=3.44.0.
- update skills and migration docs for layrz_icons ^1.1.0 renames (
-
7.5.3409 Jun 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
🐛 Bug Fixes
- TileLayer (
1192f4cby @LuisReyes98)
📊 Diff Stats
Metric Count 📄 Files changed 3 🟢 Insertions $\color{green}\textsf{+7}$ 🔴 Deletions $\color{red}\textsf{-1}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- Fixed use of
flutter_mapTileLayerinThemedTileLayerto useuserAgentPackageNameof browser as default to allow use of Open Street Map on mobile apps.
- TileLayer (
-
7.5.3328 May 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
🐛 Bug Fixes
- preserve horizontal layout in ResponsiveRow when spacing is greater than zero (
e6313eeby @ManuelRomeroA)
📊 Diff Stats
Metric Count 📄 Files changed 16 🟢 Insertions $\color{green}\textsf{+1026}$ 🔴 Deletions $\color{red}\textsf{-85}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- fix: preserve horizontal layout in
ResponsiveRowwhenspacing > 0and child gridSizes sum to 12 (e.g., twocol6, threecol4). Render path now uses a singleLayoutBuilderwith 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(wherenis the number of children in that row). Previously each child computed its width astotalWidth / 12 * gridSizeignoring spacing, which caused the wrap bug. Consumers with golden tests or pixel-perfect layouts that usespacing > 0may see small width differences (e.g. 500px → 494px for acol6withspacing: 12and two children). Layouts withspacing: 0are pixel-identical to previous versions. - internal:
ResponsiveCol.buildnow returnschilddirectly (no innerLayoutBuilder); breakpoint resolution is delegated to the parentResponsiveRowvia the new package-internal accessorResponsiveCol.gridSizeAt(double rowWidth).ResponsiveColwas always documented as a child ofResponsiveRow; standalone usage was never supported. - example: added a dedicated
ResponsiveRowShowcaseViewat/grid/responsive-rowwith 8 interactive cases (basic two-column, three-column with tunable spacing viaThemedNumberInput, mixed grids, full responsive reflow, vertical gap, builder, form layout, andcrossAxisAlignmenttoggle). Accessible from the sidebar and the home view. - skills: updated
responsive-rowandresponsive-colskills with the post-7.5.33 render path, the per-row width formula, the row-grouping algorithm, and the newgridSizeAtaccessor.
- preserve horizontal layout in ResponsiveRow when spacing is greater than zero (
-
7.5.3215 May 2026Release notes
Open source →📋 Release Notes
This release includes the following changes:
✨ Features
- version updated to 7.5.32 (
5565a72by @LuisReyes98) - add sorting and searching capabilities to ThemedTable2Controller (
ebb17d3by @mask-03)
📝 Changes
- doc: added changelog (
d4744bdby @LuisReyes98)
📊 Diff Stats
Metric Count 📄 Files changed 7 🟢 Insertions $\color{green}\textsf{+69}$ 🔴 Deletions $\color{red}\textsf{-2}$
🤖 Auto-generated by changelog workflow
Release notes
Open source →- Added
onSort,onSearchandsearchtoThemedTable2Controllerto allow programmatic control of sorting and searching, and to expose the current search query.
- version updated to 7.5.32 (
-
7.5.3112 May 2026Release notes
Open source →- Fixed
ThemedDateTimeRangePickerswapped 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, becausestartDate/endDatewere left in selection order while only the final save sorted the resultingDateTimes. The dialog now sortsstartDate/endDatethe 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.
- Fixed
-
7.5.3029 Apr 2026Release notes
Open source →- Fixed incorrect deprecation of
ThemedTableAvatar: the class is used byThemedScaffoldView.avatarBuilderin the scaffolds module and is not exclusive toThemedTable. Consumers usingThemedScaffoldViewwere receiving a falsedeprecated_member_usewarning. - Fixed incorrect deprecation of
CellTap<T>: the typedef is used byThemedColumn2.onTapinThemedTable2and must remain public and non-deprecated whileThemedTable2depends on it.
- Fixed incorrect deprecation of
-
7.5.2929 Apr 2026Release notes
Open source →- Added
onFilteredCountChanged: void Function(int count)?toThemedTable2<T>. The callback fires after every filter-and-sort cycle (initial load, search, sort,itemsupdate) with the count of currently visible rows. Optional andnullby default — fully backward-compatible. - Restored
prefixIconparameter inThemedColorPickeras@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.
- Added
-
7.5.2824 Apr 2026Release notes
Open source →- Deprecated
ThemedTable,ThemedColumn,ThemedTableAction,ThemedTableAvatar, and related typedefs (ValueBuilder,WidgetBuilder,CellTap,CellColor,ValueBuilder2,kThemedTableCanTrue). UseThemedTable2instead. All symbols will be removed in version 8.0.0. - Fixed
ResponsiveRowspacing on vertical layouts:spacingnow applies to both horizontal gaps between columns and vertical gaps between wrapped rows (Wrap.runSpacing). Previously,spacinghad no effect when columns stacked vertically on mobile (xs: .col12).
- Deprecated
-
7.5.2722 Apr 2026Release notes
Open source →- Fixed
ThemedColorPickerdouble#prefix bug:.hexextension already includes#, so the controller text was displaying##RRGGBBinstead of#RRGGBB. - Fixed
ThemedColorPickermemory leak:TextEditingControlleris now properly disposed indispose(). - Fixed
ThemedColorPickerexternal value not reflected: addeddidUpdateWidgetto sync_valueand controller text when the parent passes a newvalueprop. - Fixed
ThemedColorPickerduplicate dialog buttons:ColorPickerActionButtonshaddialogActionButtons: truewhile a manualRowwithThemedButton.cancel/ThemedButton.savewas also rendered below; setdialogActionButtons: falseto use only the Layrz-themed buttons. - Fixed
ThemedColorPickerassertion: replaced(label == null && labelText != null) || (label != null && labelText == null)with XOR logic(label == null) != (labelText == null)and added a descriptive error message. - Fixed
ThemedColorPickerdoc comments misalignment:onChanged,value, anddisabledfields had their comments shifted by two fields. - Removed
ThemedColorPickerunusedprefixIconparameter: the prefix is always a color swatch and cannot be replaced with an icon. - Improved
ThemedColorPickerplaceholderforwarding: the parameter was declared but never passed toThemedTextInput. - Improved
ThemedColorPickerdenseandpaddingforwarding:ThemedTextInputnow receives values through theisDenseandwidgetPaddinggetters. - Improved
ThemedColorPickermethod signature:_showPickeris nowFuture<void>instead ofvoid async. - Added comprehensive widget tests for
ThemedColorPickercovering: rendering (label, hex display, kPrimaryColor fallback, color swatch), disabled state (dialog does not open), and lifecycle (dispose without leak, repeated mount/unmount,didUpdateWidgetupdates field on external value change, resets tokPrimaryColoron null, handles same-value rebuild without crash). - Added
ThemedColorPickerskill documentation with parameter reference,ColorPickerTypevalues, usage examples, form integration patterns, and Color extension helpers.
- Fixed
-
7.5.2607 Apr 2026Release notes
Open source →- Fixed
ThemedNumberInputmemory leak:TextEditingControlleris now properly disposed indispose(). - Fixed
ThemedNumberInputinputRegExpparameter being silently ignored: the custom regex is now applied to theFilteringTextInputFormatterwhen provided, honoring the existing assertion that requires it whenformatis set. - Fixed
ThemedNumberInputunsafeonChangedcall whenformat.tryParse()returnsnull: unparseable input is now silently ignored and the last valid value is preserved, preventingnullfrom being emitted for intermediate typed states. - Fixed
ThemedNumberInputcursor 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
ThemedNumberInputdoc comments misalignment:placeholder,onChanged,value, anddisabledfields had their comments shifted by one field due to a copy-paste error. - Improved
ThemedNumberInput_regexallocation: moved from a getter (newRegExpinstance per access) to astatic finalfield. - Improved
ThemedNumberInputstep button UX: buttons now show 0.4 opacity and ignore taps when the next step would exceedminimumormaximum, providing clear visual feedback at boundaries. - Added
prefixIconDisabledandsuffixIconDisabledparameters toThemedTextInput: whentrue, the respective icon renders at 0.4 opacity and itsInkWelltap is suppressed, enabling disabled visual states for icon buttons without hiding them. - Added comprehensive widget tests for
ThemedNumberInputcovering: rendering (label, initial value, null value, suffixText, prefixText, isRequired, errors, hideDetails),onChangedvia 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 whenhidePrefixSuffixActionsordisabled), 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
ThemedNumberInputexample 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.
- Fixed
-
7.5.2507 Apr 2026Release notes
Open source →- Added the
firstDayandlastDayparameters toThemedCalendarto allow setting a date range for the picker, preventing selection of dates outside the specified range. - The
firstDayandlastDayparameters are now supported inThemedDateRangePicker,ThemedDatePicker,ThemedDateTimeRangePicker,ThemedDateTimeSteppedPickerandThemedDateTimePicker.
- Added the
-
7.5.2404 Apr 2026Release notes
Open source →- Fixed
ThemedTable2silent update loss for mid-list edits: reverteddidUpdateWidgetheuristic back toDeepCollectionEquality— 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
ThemedTable2update 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 theDeepCollectionEqualityequality check, making the throttle unnecessary complexity. - Added
ThemedTable2regression test:didUpdateWidgetnow verifies that editing a middle element of a same-length list (same length, same first element) correctly triggers a table reload.
- Fixed
-
7.5.2329 Mar 2026Release notes
Open source →- Fixed
ThemedTabViewdebugPrint statement left in production code. - Fixed
ThemedTabViewinitialPosition validation: out-of-bounds indices are now clamped to valid range instead of potentially crashingTabController. - Fixed
ThemedTabViewunnecessarysetState()calls in arrow button handlers:TabController.animateTo()already notifies listeners. - Fixed
ThemedTabViewarrow button disabling state not updating during navigation:setState()now called unconditionally when tab index changes, ensuring arrow disabled state reflects current position even withoutonTabIndexcallback. - Improved
ThemedTabViewtab active-state detection: color comparison now includes alpha channel for more accurate active state handling. - Improved
ThemedTabViewcode quality: extracted magic numbers to named constants (_kTabBorderRadius,_kArrowButtonHeight,_kAdditionalWidgetsSpacing,_kTabAnimationDuration). - Added
wrapArrowNavigationparameter toThemedTabViewfor circular tab navigation: whentrue, left arrow from first tab goes to last tab and right arrow from last tab goes to first tab; whenfalse(default), arrows are disabled at boundaries. - Added comprehensive widget tests for
ThemedTabViewcovering: rendering, tab switching via tap,onTabIndexcallback firing, arrow button navigation,initialPositionclamping,persistTabPositionbehavior, additional widgets, different tab styles, leading/trailing icons, custom padding and alignment, arrow button state reactivity during navigation (regression test), andwrapArrowNavigationbehavior (wrap first→last, wrap last→first, arrows always enabled at boundaries). - Added
ThemedTabViewskill documentation with parameter reference, usage examples, gotchas, best practices, and testing patterns. - Added comprehensive widget tests for
ResponsiveRowcovering: basic rendering, empty children, single child, spacing parameter (0 and custom values), main/cross axis alignment, full-width enforcement,ResponsiveRow.builderwith various item counts, and integration tests withResponsiveCol. - Added comprehensive widget tests for
ResponsiveColcovering: child rendering, breakpoint fallback logic (xs default, sm/md/lg/xl optional), LayoutBuilder usage, and child widget preservation. - Added widget tests for
Sizesenum covering: gridSize calculations for all column variants, boxWidth calculations at various container widths, and validation of size constraints. - Added
ResponsiveRowandResponsiveColskill 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).
- Fixed
-
7.5.2228 Mar 2026Release notes
Open source →- Fixed
ThemedTable2column key collision in_itemsStrings: inner key now uses column index instead ofcol.hashCode, preventing silent data corruption when two columns share the sameheaderText. - Fixed
ThemedTable2silent update loss: updates arriving while loading are now queued via_pendingUpdateflag and processed once the current operation completes. - Fixed
ThemedTable2unsendable closure crash: sort keys are now precomputed on the main thread beforecompute(), ensuringvalueBuilderclosures that captureBuildContextori18nobjects never cross the isolate boundary. - Improved
ThemedTable2multiselect performance: introduced an internalSet<T>mirroring_selectedItemsfor O(1)contains()lookups instead of O(n) on the backingList<T>. - Improved
ThemedTable2didUpdateWidgetperformance: replacedDeepCollectionEquality(O(n)) with a fast O(1) heuristic usingidentical+ length check. - Removed all
debugPrintstatements fromThemedTable2._filterAndSort(startup, precompute, sort, finish, queue logs). - Added widget tests for
ThemedTable2covering: renders item values after compute completes, shows loading indicator while computing, renders without errors on empty dataset, column key collision regression (two columns with identicalheaderTextshow distinct data), search filters by matching query, search matches values from all columns, search restores all items when cleared,controller.sortascending (A→Z),controller.sortdescending (Z→A), numeric sort as numbers not strings,controller.refreshpreserves sort order,didUpdateWidgetreflects new items on rebuild,didUpdateWidgethandles growing list without losing existing rows. - Add
ThemedTable2skill.
- Fixed
-
7.5.2128 Mar 2026 -
7.5.2024 Mar 2026Release notes
Open source →- Fixed
ThemedTable2header overflow detection by including the sort icon width in the available text width, ensuring tooltips appear correctly.
- Fixed
-
7.5.1924 Mar 2026Release notes
Open source →- Add
ThemedTooltipto headers ofThemedTable2for better overflow handling
- Add
-
7.5.1821 Mar 2026Release notes
Open source →- Added
mapboxCustomStyleIdandmapboxCustomUsernametoThemedTileLayerto support custom Mapbox styles.
- Added
-
7.5.1704 Mar 2026 -
7.5.1628 Feb 2026 -
7.5.1524 Feb 2026Release notes
Open source →- Adjusted
ThemedDateTimeSteppedPickerto call the onChanged method only once after the time is selected.
- Adjusted
-
7.5.1419 Feb 2026Release notes
Open source →- Created
ThemedDateTimeSteppedPickerwidget for a stepped date and time picking experience, allowing users to select date first and then time
- Created
-
7.5.1313 Feb 2026Release notes
Open source →- Added
autofillHintsparameter toThemedPasswordInputto 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.
- Added
-
7.5.1213 Feb 2026Release notes
Open source →- Updated
url_launcher_androiddependency to^6.3.28to support latest Android features and improvements.
- Updated
-
7.5.1111 Feb 2026Release notes
Open source →- Improved
ThemedPasswordInputrequirements validation logic to use.entriesfor cleaner iteration and better performance.
- Improved
-
7.5.1011 Feb 2026Release notes
Open source →- Renamed
tools/totool/as suggestion of the Dart team to follow the standard convention for Dart CLI tools.
- Renamed
-
7.5.829 Jan 2026Release notes
Open source →- Upgraded
google_fontsdependency to^8.0.0to support latest font features and improvements.
- Upgraded
-
7.5.721 Jan 2026Release notes
Open source →- Added
focusNodeprop toThemedNumberInputto allow external focus node management.
- Added
-
7.5.616 Jan 2026 -
7.5.515 Jan 2026Release notes
Open source →- Added
itemsLengthparameter todeleteConfirmationDialogutility to show the number of items being deleted in the confirmation dialog.
- Added
-
7.5.415 Jan 2026Release notes
Open source →- Critical fix on
ThemedTable2Select All checkbox, fixed an issue where selecting all items selected everything avaiable even when filtering with the search bar.
- Critical fix on
-
7.5.316 Dec 2025Release notes
Open source →- Changed
customSortsignature onThemedColumn2to include theascendingparameter to allow more complex sorting algorithms.
- Changed
-
7.5.206 Dec 2025Release notes
Open source →- Fixed
ThemedMapToolbarzoom in and zoom out buttons doing the opposite action.
- Fixed
-
7.5.105 Dec 2025 -
7.5.028 Nov 2025Release notes
Open source →- 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
ThemedTable2Controllerto handle programmatically sorting, filtering and refreshing the table data. - Added
debounceproperty toThemedSearchInputto handle debounced search inputs. - Improvements over
ThemedImagebase64 caching to prevent memory leaks. - Updated
ThemedChipto support more styles and configurations. - New
ThemedChipStyleenum to define the style of theThemedChip. - New
ThemedChipGroupwidget to handle groups of chips with selection support. - Optimizations on
ThemedTable2to improve performance when handling large datasets. - Bypassed limitations of
IsolateonThemedTable2when using complex objects as items, the workaround is to use theisolateSafetyproperty onThemedColumn2to define a function that returns a primitive type from the item to be used on sorting and filtering instead of the full object.
- Updated constraint of Dart SDK to
-
7.5.0+128 Nov 2025Release notes
Open source →- Hotfix regarding of a bug on
ThemedTable2where the loading indicator was not being removed after filtering and sorting when the items list is empty.
- Hotfix regarding of a bug on
-
7.5.0-rc117 Nov 2025 pre-releaseNothing published for this version
-
7.5.0-prerelease217 Nov 2025 pre-releaseNothing published for this version
-
7.5.0-prerelease117 Nov 2025 pre-releaseNothing published for this version
-
7.5.0-beta414 Nov 2025 pre-releaseNothing published for this version
-
7.5.0-beta314 Nov 2025 pre-releaseNothing published for this version
-
7.5.0-beta214 Nov 2025 pre-releaseNothing published for this version
-
7.5.0-beta114 Nov 2025 pre-releaseNothing published for this version
-
7.4.1212 Nov 2025Release notes
Open source →- Changed
ThemedButtonloading and disabled behavior to use the original coloring of the button style instead of from context.
- Changed
-
7.4.1106 Nov 2025Release notes
Open source →- Added
paddingprop toThemedDateTimePickerto handle the padding of the input field.
- Added
-
7.4.1006 Nov 2025 -
7.4.906 Nov 2025 -
7.4.803 Nov 2025Release notes
Open source →- Updated design of
ThemedButtonto support new styling when loading or in cooldown. - Added factory on
ThemedButton.legacyLoadingto support the previous loading design.
- Updated design of
-
7.4.730 Oct 2025Release notes
Open source →- Added
customConfirmandcustomDismissparameters to thedeleteConfirmationDialogutility.
- Added
-
7.4.627 Oct 2025Release notes
Open source →- Fixed an issue with the
ThemedTable2where the filtering was not working correctly after the last changes. - Changed behavior on
dispose()onThemedTextInputto only dispose the internal controller and focus node when they are not provided externally.
- Fixed an issue with the
-
7.4.6+127 Oct 2025 -
7.4.524 Oct 2025 -
7.4.424 Oct 2025Release notes
Open source →- 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)
- Solved extremely weird bug using the
-
7.4.317 Oct 2025Release notes
Open source →- Added
ThemedTable2OnTapBehaviorenum to define the default behavior of onTap events on table cells.
- Added