NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Layrz standard styling library for Flutter. Widget library following the Material Design 3 guidelines, with a focus on reliavility and functionality.
Last release 22 days ago
15 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
291 releases · first in 2023
This release includes the following changes:
This release includes the following changes:
5aa3af3 by @ManuelRomeroA)5aa3af3 by @ManuelRomeroA)26487b1 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 12 |
| 🟢 Insertions | $\color{green}\textsf{+111}$ |
| 🔴 Deletions | $\color{red}\textsf{-89}$ |
🤖 Auto-generated by changelog workflow
layrz_sdk's framework-independent TimeOfDay instead of Flutter Material's. Affected public APIs: ThemedTimePicker (value, onChanged), ThemedTimeRangePicker (value, onChanged), and the datetime pickers' internal time handling. Consumers can now feed TimeOfDay values straight from layrz_sdk/layrz_models models (e.g. AssetInput's labor-hour fields) without converting. Call sites that passed Material's TimeOfDay must switch to layrz_sdk's (both share hour/minute); the simplest migration is to hide Material's TimeOfDay and import sdk's, as the inputs layer now does internally.TimeOfDay.hourOfPeriod/period (which sdk's type does not provide) are now computed inside the picker via private helpers, and .replacing(...) was replaced by freezed's copyWith.layrz_sdk: ^4.4.4 (already the floor since 7.10.0).One column per quarter.
This release includes the following changes:
This release includes the following changes:
bb619e0 by @PHKenny, Anthropic Claude)7d121d9 by @PHKenny, Anthropic Claude)8116e64 by @PHKenny, Anthropic Claude)bb619e0 by @PHKenny, Anthropic Claude)| Metric | Count |
|---|---|
| 📄 Files changed | 102 |
| 🟢 Insertions | $\color{green}\textsf{+390}$ |
| 🔴 Deletions | $\color{red}\textsf{-439}$ |
🤖 Auto-generated by changelog workflow
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.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.MdiRemapIcon from layrz_sdk for the icon picker, maintaining compatibility with the new icon bridge.layrz_sdk to ^4.4.4 which provides the MdiRemapIcon type for cross-package icon compatibility.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.This release includes the following changes:
This release includes the following changes:
d706c9f by @ManuelRomeroA)2d3d5e2 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 6 |
| 🟢 Insertions | $\color{green}\textsf{+13}$ |
| 🔴 Deletions | $\color{red}\textsf{-50}$ |
🤖 Auto-generated by changelog workflow
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.This release includes the following changes:
This release includes the following changes:
| Metric | Count |
|---|---|
| 📄 Files changed | 4 |
| 🟢 Insertions | $\color{green}\textsf{+32}$ |
| 🔴 Deletions | $\color{red}\textsf{-52}$ |
🤖 Auto-generated by changelog workflow
This release includes the following changes:
This release includes the following changes:
fa796df by @PHKenny, Claude Opus 5)ee7c05a by @PHKenny, Claude Opus 5)1629cc0 by @PHKenny, Claude Opus 5)f132335 by @PHKenny, Claude Opus 5)ee7c05a by @PHKenny, Claude Opus 5)1629cc0 by @PHKenny, Claude Opus 5)a08d542 by @PHKenny)| Metric | Count |
|---|---|
| 📄 Files changed | 35 |
| 🟢 Insertions | $\color{green}\textsf{+428}$ |
| 🔴 Deletions | $\color{red}\textsf{-191}$ |
🤖 Auto-generated by changelog workflow
LayrzTokenizer.spacer getter to spacing, spacerSize to spacingSize, and spacerBox to sizedBox. No deprecation shims were provided — these are hard renames.ShadowTokenizer.shadowColor getter. The shadow() method no longer forwards a shadowColor parameter to generateContainerElevation.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.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.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.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.BorderTokenizer extension with a borderWidth getter (defaults to 1.5).ColorTokenizer.tonalOpacity getter (defaults to 0.2), replacing scattered hardcoded alpha values across widgets.SpacerTokenizer.reducedMargin getter, computed as spacing / 2.kLayrzFont constant exported from lib/src/theme/src/constants.dart — AppFont(source: .google, name: 'Open Sans') — as the new default font for theme generation.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).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).RadiusTokenizer.innerRadius to clamp the computed radius to a minimum of 0 (max(innerRadius, 0)), preventing a negative radius when spacer exceeds outerRadius.ThemedSnackbar.duration default from 5 seconds to 10 seconds.LayrzIcons.mdiCheck / LayrzIcons.mdiClose at size 14 (were the Solar check/close circle and square icons).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.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.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.ThemedAppBarAvatar to derive the avatar radius from the tokenizer instead of the avatarRadius property (the property is still accepted but is currently ignored).ThemedTextInput.borderRadius and the ThemedTextInput.outerPadding static getter in favour of the tokenizer. Both still work in this release.This release includes the following changes:
This release includes the following changes:
d227d08 by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 9 |
| 🟢 Insertions | $\color{green}\textsf{+243}$ |
| 🔴 Deletions | $\color{red}\textsf{-9}$ |
🤖 Auto-generated by changelog workflow
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.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.This release includes the following changes:
This release includes the following changes:
8a27964 by @ManuelRomeroA)6368966 by @PHKenny)4f748af by @ManuelRomeroA)111c1b3 by @ManuelRomeroA)87eeeac by @LuisReyes98)| Metric | Count |
|---|---|
| 📄 Files changed | 8 |
| 🟢 Insertions | $\color{green}\textsf{+91}$ |
| 🔴 Deletions | $\color{red}\textsf{-20}$ |
🤖 Auto-generated by changelog workflow
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.layrz_modelThis release includes the following changes:
This release includes the following changes:
29ebc2f by @PHKenny, Claude Opus 4.8)| Metric | Count |
|---|---|
| 📄 Files changed | 34 |
| 🟢 Insertions | $\color{green}\textsf{+811}$ |
| 🔴 Deletions | $\color{red}\textsf{-686}$ |
🤖 Auto-generated by changelog workflow
layrz_icons to ^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.>=3.12.0 and Flutter >=3.44.0.This release includes the following changes:
This release includes the following changes:
1192f4c by @LuisReyes98)| Metric | Count |
|---|---|
| 📄 Files changed | 3 |
| 🟢 Insertions | $\color{green}\textsf{+7}$ |
| 🔴 Deletions | $\color{red}\textsf{-1}$ |
🤖 Auto-generated by changelog workflow
flutter_map TileLayer in ThemedTileLayer to use userAgentPackageName of browser as default to allow use of Open Street Map on mobile apps.This release includes the following changes:
This release includes the following changes:
e6313ee by @ManuelRomeroA)| Metric | Count |
|---|---|
| 📄 Files changed | 16 |
| 🟢 Insertions | $\color{green}\textsf{+1026}$ |
| 🔴 Deletions | $\color{red}\textsf{-85}$ |
🤖 Auto-generated by changelog workflow
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.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.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.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.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.This release includes the following changes:
This release includes the following changes:
5565a72 by @LuisReyes98)ebb17d3 by @mask-03)d4744bd by @LuisReyes98)| Metric | Count |
|---|---|
| 📄 Files changed | 7 |
| 🟢 Insertions | $\color{green}\textsf{+69}$ |
| 🔴 Deletions | $\color{red}\textsf{-2}$ |
🤖 Auto-generated by changelog workflow
onSort, onSearch and search to ThemedTable2Controller to allow programmatic control of sorting and searching, and to expose the current search query.Fixed ThemedDateTimeRangePicker swapped times when the date range was picked in reverse order: selecting the later date first and the earlier date sec
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.Fixed incorrect deprecation of ThemedTableAvatar: the class is used by ThemedScaffoldView.avatarBuilder in the scaffolds module and is not exclusive t…
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.CellTap<T>: the typedef is used by ThemedColumn2.onTap in ThemedTable2 and must remain public and non-deprecated while ThemedTable2 depends on it.Restored prefixIcon parameter in ThemedColorPicker as @Deprecated. The parameter was removed in 7.5.27 but is still referenced in downstream packages.…
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.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.Deprecated ThemedTable, ThemedColumn, ThemedTableAction, ThemedTableAvatar, and related typedefs (ValueBuilder, WidgetBuilder, CellTap, CellColor, Val…
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.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).Fixed ThemedColorPicker double # prefix bug: .hex extension already includes #, so the controller text was displaying ##RRGGBB instead of #RRGGBB.
ThemedColorPicker double # prefix bug: .hex extension already includes #, so the controller text was displaying ##RRGGBB instead of #RRGGBB.ThemedColorPicker memory leak: TextEditingController is now properly disposed in dispose().ThemedColorPicker external value not reflected: added didUpdateWidget to sync _value and controller text when the parent passes a new value prop.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.ThemedColorPicker assertion: replaced (label == null && labelText != null) || (label != null && labelText == null) with XOR logic (label == null) != (labelText == null) and added a descriptive error message.ThemedColorPicker doc comments misalignment: onChanged, value, and disabled fields had their comments shifted by two fields.ThemedColorPicker unused prefixIcon parameter: the prefix is always a color swatch and cannot be replaced with an icon.ThemedColorPicker placeholder forwarding: the parameter was declared but never passed to ThemedTextInput.ThemedColorPicker dense and padding forwarding: ThemedTextInput now receives values through the isDense and widgetPadding getters.ThemedColorPicker method signature: _showPicker is now Future<void> instead of void async.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).ThemedColorPicker skill documentation with parameter reference, ColorPickerType values, usage examples, form integration patterns, and Color extension helpers.Fixed ThemedNumberInput memory leak: TextEditingController is now properly disposed in dispose().
ThemedNumberInput memory leak: TextEditingController is now properly disposed in dispose().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.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.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).ThemedNumberInput doc comments misalignment: placeholder, onChanged, value, and disabled fields had their comments shifted by one field due to a copy-paste error.ThemedNumberInput _regex allocation: moved from a getter (new RegExp instance per access) to a static final field.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.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.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).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.Added the firstDay and lastDay parameters to ThemedCalendar to allow setting a date range for the picker, preventing selection of dates outside the sp
firstDay and lastDay parameters to ThemedCalendar to allow setting a date range for the picker, preventing selection of dates outside the specified range.firstDay and lastDay parameters are now supported in ThemedDateRangePicker, ThemedDatePicker, ThemedDateTimeRangePicker, ThemedDateTimeSteppedPicker and ThemedDateTimePicker.Fixed ThemedTable2 silent update loss for mid-list edits: reverted didUpdateWidget heuristic back to DeepCollectionEquality — the heuristic (identical
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).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.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.Fixed ThemedTabView debugPrint statement left in production code.
ThemedTabView debugPrint statement left in production code.ThemedTabView initialPosition validation: out-of-bounds indices are now clamped to valid range instead of potentially crashing TabController.ThemedTabView unnecessary setState() calls in arrow button handlers: TabController.animateTo() already notifies listeners.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.ThemedTabView tab active-state detection: color comparison now includes alpha channel for more accurate active state handling.ThemedTabView code quality: extracted magic numbers to named constants (_kTabBorderRadius, _kArrowButtonHeight, _kAdditionalWidgetsSpacing, _kTabAnimationDuration).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.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).ThemedTabView skill documentation with parameter reference, usage examples, gotchas, best practices, and testing patterns.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.ResponsiveCol covering: child rendering, breakpoint fallback logic (xs default, sm/md/lg/xl optional), LayoutBuilder usage, and child widget preservation.Sizes enum covering: gridSize calculations for all column variants, boxWidth calculations at various container widths, and validation of size constraints.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).Fixed ThemedTable2 column key collision in _itemsStrings: inner key now uses column index instead of col.hashCode, preventing silent data corruption w
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.ThemedTable2 silent update loss: updates arriving while loading are now queued via _pendingUpdate flag and processed once the current operation completes.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.ThemedTable2 multiselect performance: introduced an internal Set<T> mirroring _selectedItems for O(1) contains() lookups instead of O(n) on the backing List<T>.ThemedTable2 didUpdateWidget performance: replaced DeepCollectionEquality (O(n)) with a fast O(1) heuristic using identical + length check.debugPrint statements from ThemedTable2._filterAndSort (startup, precompute, sort, finish, queue logs).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.ThemedTable2 skill.- Add claudio Skills
SkillsFixed ThemedTable2 header overflow detection by including the sort icon width in the available text width, ensuring tooltips appear correctly.
ThemedTable2 header overflow detection by including the sort icon width in the available text width, ensuring tooltips appear correctly.Add ThemedTooltip to headers of ThemedTable2 for better overflow handling
ThemedTooltip to headers of ThemedTable2 for better overflow handlingAdded mapboxCustomStyleId and mapboxCustomUsername to ThemedTileLayer to support custom Mapbox styles.
mapboxCustomStyleId and mapboxCustomUsername to ThemedTileLayer to support custom Mapbox styles.Updated attributions on ThemedTileLayer for OpenStreetMaps.
ThemedTileLayer for OpenStreetMaps.Native support for TZDateTime on Date and DateTime pickers.
TZDateTime on Date and DateTime pickers.Adjusted ThemedDateTimeSteppedPicker to call the onChanged method only once after the time is selected.
ThemedDateTimeSteppedPicker to call the onChanged method only once after the time is selected.Created ThemedDateTimeSteppedPicker widget for a stepped date and time picking experience, allowing users to select date first and then time
ThemedDateTimeSteppedPicker widget for a stepped date and time picking experience, allowing users to select date first and then timeAdded autofillHints parameter to ThemedPasswordInput to improve browser password manager integration with default values for new and existing password
autofillHints parameter to ThemedPasswordInput to improve browser password manager integration with default values for new and existing password fields.Updated url_launcher_android dependency to ^6.3.28 to support latest Android features and improvements.
url_launcher_android dependency to ^6.3.28 to support latest Android features and improvements.Improved ThemedPasswordInput requirements validation logic to use .entries for cleaner iteration and better performance.
ThemedPasswordInput requirements validation logic to use .entries for cleaner iteration and better performance.Renamed tools/ to tool/ as suggestion of the Dart team to follow the standard convention for Dart CLI tools.
tools/ to tool/ as suggestion of the Dart team to follow the standard convention for Dart CLI tools.Upgraded google_fonts dependency to ^8.0.0 to support latest font features and improvements.
google_fonts dependency to ^8.0.0 to support latest font features and improvements.Added focusNode prop to ThemedNumberInput to allow external focus node management.
focusNode prop to ThemedNumberInput to allow external focus node management.Add onLongPress with customLongPressDuration in ThemedButton
onLongPress with customLongPressDuration in ThemedButtonAdded itemsLength parameter to deleteConfirmationDialog utility to show the number of items being deleted in the confirmation dialog.
itemsLength parameter to deleteConfirmationDialog utility to show the number of items being deleted in the confirmation dialog.Critical fix on ThemedTable2 Select All checkbox, fixed an issue where selecting all items selected everything avaiable even when filtering with the s
ThemedTable2 Select All checkbox, fixed an issue where selecting all items selected everything avaiable even when filtering with the search bar.Changed customSort signature on ThemedColumn2 to include the ascending parameter to allow more complex sorting algorithms.
customSort signature on ThemedColumn2 to include the ascending parameter to allow more complex sorting algorithms.Fixed ThemedMapToolbar zoom in and zoom out buttons doing the opposite action.
ThemedMapToolbar zoom in and zoom out buttons doing the opposite action.Fixed ThemedTable2 search debounce not working as expected.
ThemedTable2 search debounce not working as expected.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.
ThemedTable2 where the loading indicator was not being removed after filtering and sorting when the items list is empty.Updated constraint of Dart SDK to >=3.10.0 <4.0.0
>=3.10.0 <4.0.0>=3.38.0ThemedTable2Controller to handle programmatically sorting, filtering and refreshing the table data.debounce property to ThemedSearchInput to handle debounced search inputs.ThemedImage base64 caching to prevent memory leaks.ThemedChip to support more styles and configurations.ThemedChipStyle enum to define the style of the ThemedChip.ThemedChipGroup widget to handle groups of chips with selection support.ThemedTable2 to improve performance when handling large datasets.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.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Changed ThemedButton loading and disabled behavior to use the original coloring of the button style instead of from context.
ThemedButton loading and disabled behavior to use the original coloring of the button style instead of from context.Added padding prop to ThemedDateTimePicker to handle the padding of the input field.
padding prop to ThemedDateTimePicker to handle the padding of the input field.New ThemedTabStyle enum to define the style of the ThemedTabView tabs.
ThemedTabStyle enum to define the style of the ThemedTabView tabs.Add additionalWidgets in ThemedTabView.
additionalWidgets in ThemedTabView.Updated design of ThemedButton to support new styling when loading or in cooldown.
ThemedButton to support new styling when loading or in cooldown.ThemedButton.legacyLoading to support the previous loading design.Added customConfirm and customDismiss parameters to the deleteConfirmationDialog utility.
customConfirm and customDismiss parameters to the deleteConfirmationDialog utility.Fix on filtering items on ThemedTable2 when it's empty.
ThemedTable2 when it's empty.Fixed an issue with the ThemedTable2 where the filtering was not working correctly after the last changes.
ThemedTable2 where the filtering was not working correctly after the last changes.dispose() on ThemedTextInput to only dispose the internal controller and focus node when they are not provided externally.Added initialPosition and onTabIndex in ThemedTabView
initialPosition and onTabIndex in ThemedTabViewSolved extremely weird bug using the ThemedTable2, now creates a copy of the items list to prevent issues when filtering and sorting the data. (Discov
ThemedTable2, now creates a copy of the items list to prevent issues when filtering and sorting the data. (Discovered by @ManuelRomeroA)Your coding agent can read these notes before it upgrades. Set up the MCP server →