liquid_flutter 23.0.0-13 copy "liquid_flutter: ^23.0.0-13" to clipboard
liquid_flutter: ^23.0.0-13 copied to clipboard

Liquid Oxygen Components for Flutter

23.0.0-13 #

Released on: 8/22/2026, changelog automatically generated.

Bug Fixes #

  • LdTabNavigation: restore indicator drag without blocking tab taps (e114b12)
  • LdToolAllowRule: match absent nested objects pinned to Any (1d24ad1)
  • LdInput: use regular weight for field text (55e73bc)
  • LdInput: restore label style for compact control height (ceeee8b)

Features #

  • LdFilterBool: implement equality operator and hashCode method (c144052)
  • LdComposeBar: integrate theme into attach buttons and adjust padding (61c60f3)
  • LdConversation: add tool call override functionality and history compacting feature (9edd17d)
  • LdMarkdown: add GFM footnote rendering (f0d2c6a)

23.0.0-12 #

Released on: 8/18/2026, changelog automatically generated.

Bug Fixes #

  • LdToolAllowRule: allow wildcard to match absent args (#152) (2e29138)
  • LdAppBar: remove leftover debug print statements in _buildScrim (05bfb2b)
  • restore tap-through on LdTabNavigation indicator and fix LdDrawerLayout dispose crash (4ba13c6)

Features #

  • LdSubmit: allow scoping exception localization via onException (b5870b2)

API Changes #

💣 Breaking changes

class AppBarFrame (lib/src/appbar/appbar_frame.dart)

  • 🔄 Param type changed in default constructor: scrimColor (Color?Color? Function(bool)?)
  • ❌ Property removed: insetBorderRadius
  • 🔄 Property type changed: scrimColor

class LdAppBar (lib/src/appbar/appbar.dart)

  • ❌ Property removed: insetScreenRadius

class LdAppBarConfig (lib/src/appbar/appbar.dart)

  • ❌ Property removed: insetScreenRadius

class LdAppBarWidget (lib/src/appbar/appbar.dart)

  • ❌ Property removed: insetScreenRadius

class _LdCounterDigit (lib/src/counter.dart)

  • ❇️ Param added in default constructor: ascending (named, required)

✨ Minor changes

class AppBarFrame (lib/src/appbar/appbar_frame.dart)

  • ❌ Param removed in default constructor: insetBorderRadius (named, optional, default: true)
  • ❇️ Param added in default constructor: useAdaptiveRadius (named, optional, default: true)
  • ❇️ Property added: useAdaptiveRadius

class LdAppBar (lib/src/appbar/appbar.dart)

  • ❌ Param removed in default constructor: insetScreenRadius (named, optional)
  • ❇️ Param added in default constructor: useAdaptiveRadius (named, optional)
  • ❌ Param removed in constructor top: insetScreenRadius (named, optional)
  • ❇️ Param added in constructor top: useAdaptiveRadius (named, optional)
  • ❌ Param removed in constructor bottom: insetScreenRadius (named, optional)
  • ❇️ Param added in constructor bottom: useAdaptiveRadius (named, optional)
  • ❇️ Property added: useAdaptiveRadius

class LdAppBarConfig (lib/src/appbar/appbar.dart)

  • ❌ Param removed in default constructor: insetScreenRadius (named, optional)
  • ❇️ Param added in default constructor: useAdaptiveRadius (named, optional)
  • ❇️ Property added: useAdaptiveRadius
  • ❌ Param removed in method copyWith: insetScreenRadius (named, optional)
  • ❇️ Param added in method copyWith: useAdaptiveRadius (named, optional)

class LdAppBarWidget (lib/src/appbar/appbar.dart)

  • ❌ Param removed in default constructor: insetScreenRadius (named, optional, default: true)
  • ❇️ Param added in default constructor: useAdaptiveRadius (named, optional, default: true)
  • ❇️ Property added: useAdaptiveRadius

class LdCounter (lib/src/counter.dart)

  • ❇️ Params added in default constructor: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.headline)
  • ❇️ Properties added: size, type

class LdCounterDuration (lib/src/counter.dart)

  • ❇️ Class added: LdCounterDuration

class LdInput (lib/src/input.dart)

  • ❇️ Params added in default constructor: style (named, optional), borderRadius (named, optional)
  • ❇️ Properties added: style, borderRadius

extension LdModalRouteExtension (lib/src/modal/modal.dart)

  • ❇️ Property added: isInSheet

class LdModalRouteInfo (lib/src/modal/modal.dart)

  • ❇️ Class added: LdModalRouteInfo

class LdSubmit<T, Arg> (lib/src/submit/submit.dart)

  • ❇️ Param added in default constructor: onException (named, optional)
  • ❇️ Property added: onException

👀 Patch changes

class _AppBarFrameState (lib/src/appbar/appbar_frame.dart)

  • ❌ Method removed: _screenRelativeBorderRadius
  • ❇️ Param added in method _insidePadding: outsideRadius (positional, required)
  • ❌ Param removed in method _buildScrim: scrimColor (positional, required)
  • ❇️ Param added in method _buildScrim: isScrolledUnder (positional, required)
  • ❇️ Method added: _adaptiveBorderRadius

class _ButtonShape (lib/src/button.dart)

  • ❇️ Method added: _circularSizeBump

class _DigitSlot (lib/src/counter.dart)

  • ❇️ Class added: _DigitSlot

class _LdCounterDigit (lib/src/counter.dart)

  • ❇️ Property added: ascending

class _LdCounterDigitState (lib/src/counter.dart)

  • ❌ Properties removed: _textWidths, chars
  • ❇️ Properties added: _current, _outgoing, _incoming, _springKey
  • ❌ Methods removed: calculateTextWidth, _digitHeight, _generateTextWidths, _buildDigitColumn, _buildInlineDigit, _buildStandaloneDigit
  • ❇️ Methods added: _startTransition, _onRollEnd, _textWidth, _buildRollingContent, _buildSettledContent, _wrapInline

class _LdCounterState (lib/src/counter.dart)

  • 🔄 Property type changed: _digits
  • ❇️ Properties added: _ascending, _nextId, _initialized
  • ❇️ Method added: _removeSlot

class _LdMultiPanelLayoutState (lib/src/multi_panel/multi_panel_layout.dart)

  • 🔄 Property type changed: _bodyDecoration
  • ❌ Property removed: _bodyMargin

function _isRollableDigit (lib/src/counter.dart)

  • ❇️ Function added: _isRollableDigit

23.0.0-11 #

Released on: 8/11/2026, changelog automatically generated.

Bug Fixes #

  • don't write to LdSubmitController after dispose (675cd26)

23.0.0-10 #

Released on: 8/7/2026, changelog automatically generated.

Bug Fixes #

  • ci: push release tags one-by-one [skip ci] (6a46d5e)

23.0.0-9 #

Released on: 8/6/2026, changelog automatically generated.

Bug Fixes #

  • LdSubmitController: ignore stale results after cancel/retry (58919d2)
  • use normal draggable on desktop since we can disambiguate touchables better now (4bb2af9)
  • spacing for headlines and dividers reduced (b3512b9)
  • request focus for all touchables on tap (086ee90)
  • ensure proper focus traversal in multi panel (54d974c)
  • modal centering correctly in multi panel (4283b22)
  • update disabledAlpha value for shadRed color token (6018e7f)
  • disallow trackpad swipe on multi-panel (5f36680)
  • change default appbar behaviour (6f43fed)
  • emoji optical centering (f1e6778)
  • dismissal (5e20b90)
  • tooltip on sliders, extract date_picker to be imperatively called (bddcb40)
  • ci: unblock analyze and tests on Flutter 3.44.8 (4c1b5a5)

Features #

  • metaball: add ForceDemo to showcase varying force multipliers for metaballs (cd6603e)
  • ld_runner_step: add customizable left padding for expanded children block (3e44c13)
  • LdNavigationRail: add width-responsive rail from shared LdNavigationTab (7bf2878)
  • add labels to sliders (c523a78)
  • enhance LdInput and LdButton components with new features and improvements (a8c526f)
  • add swagger identifiable mixin processing (351176d)
  • add hashtag support to markdown editor/widget, rename enabled->disabled (a4a7ff8)

API Changes #

💣 Breaking changes

class LdCallbackModel<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • 🔄 Type parameters changed: T extends Identifiable<IdType>, IdTypeT extends Identifiable<IdType>, IdType, TCreate, TUpdate
  • 🔄 Param type changed in default constructor: updateItem (Future<T?> Function(BuildContext, IdType, T)?Future<T?> Function(BuildContext, IdType, TUpdate)?), createItem (Future<T> Function(BuildContext, T?)?Future<T> Function(BuildContext, TCreate)?), updateBatchFn (Future<void> Function(BuildContext, Map<IdType, T>)?Future<void> Function(BuildContext, Map<IdType, TUpdate>)?)
  • 🔄 Properties type changed: updateItem, createItem, updateBatchFn
  • 🔄 Param type changed in method persistCreate: payload (T?TCreate)
  • 🔄 Param type changed in method persistUpdate: payload (TTUpdate)
  • 🔄 Param type changed in method persistUpdateBatch: items (Map<IdType, T>Map<IdType, TUpdate>)
  • 🔄 Param type changed in method createPreview: payload (T?TCreate)
  • 🔄 Param type changed in method create: payload (T?TCreate)
  • 🔄 Param type changed in method update: payload (TTUpdate)
  • 🔄 Param type changed in method updateBatch: items (Map<IdType, T>Map<IdType, TUpdate>)
  • 🔄 Method type changed: greedy (LdCallbackModel<L, IdType>LdCallbackModel<L, IdType, TCreate, TUpdate>), fromList (LdCallbackModel<L, IdType>LdCallbackModel<L, IdType, L, L>)
  • 🔄 Type parameters changed: L extends Identifiable<IdType>, IdTypeL extends Identifiable<IdType>, IdType, TCreate, TUpdate
  • 🔄 Param type changed in method greedy: updateItem (Future<L?> Function(BuildContext, IdType, L)?Future<L?> Function(BuildContext, IdType, TUpdate)?), createItem (Future<L> Function(BuildContext, L?)?Future<L> Function(BuildContext, TCreate)?), updateBatch (Future<void> Function(BuildContext, Map<IdType, L>)?Future<void> Function(BuildContext, Map<IdType, TUpdate>)?)

class LdCounter (lib/src/counter.dart)

  • 🔄 Superclass changed: StatelessWidgetStatefulWidget
  • ❌ Constructors removed: s, l, xs
  • ❌ Properties removed: size, type
  • ❌ Method removed: build

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • ❌ Param removed in method reorder: reorderHandler (named, required)
  • ❇️ Param added in method reorder: activeSortOption (named, required)

class LdMonkeyAppBar<T extends Identifiable (lib/src/monkey/monkey_app_bar.dart)

  • ❌ Property removed: additionalActions

class LdMonkeyDetailPage<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❌ Class removed: LdMonkeyDetailPage

class LdMonkeyMasterPage<T extends Identifiable (lib/src/monkey/monkey_master_page.dart)

  • ❌ Properties removed: primaryAppBarConfig, secondaryAppBarConfig, primaryAppBarAdditionalActions

typedef LdMonkeyReorderHandler<T extends Identifiable (lib/src/monkey/ld_monkey_route_definitions.dart)

  • ❌ Typedef removed: LdMonkeyReorderHandler

class LdMonkeyRouteScope<T extends Identifiable (lib/src/monkey/monkey_route_scope.dart)

  • ❌ Property removed: reorderHandler

class LdMonkeyScrollableDetailView<T extends Identifiable (lib/src/monkey/monkey_scrollable_detail_view.dart)

  • ❌ Class removed: LdMonkeyScrollableDetailView

class LdMonkeyStackDetailView<T extends Identifiable (lib/src/monkey/monkey_stack_detail_view.dart)

  • ❌ Class removed: LdMonkeyStackDetailView

class LdMonkeyStreamSelection<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❌ Class removed: LdMonkeyStreamSelection

class MonkeyRouteNode<T extends Identifiable (lib/src/monkey/monkey_route_tree.dart)

  • ❌ Property removed: reorderHandler

class _LdCounterDigit (lib/src/counter.dart)

  • ❌ Params removed in default constructor: size (named, required), type (named, required)
  • ❇️ Param added in default constructor: style (named, required)

class _LdCounterState (lib/src/counter.dart)

  • 🔄 Param type changed in method didUpdateWidget: oldWidget (_LdCounterWidgetLdCounter)

class _LdMonkeyViewingItemLoader<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❌ Params removed in default constructor: id (named, required), buildItem (named, required)
  • ❇️ Params added in default constructor: ids (named, required), builder (named, required)

class _LdSliderHandle (lib/src/value_slider.dart)

  • ❌ Param removed in default constructor: tooltipKey (named, required)
  • ❇️ Param added in default constructor: showTooltip (named, required)

function ldConfirmModal (lib/src/modal/utils.dart)

  • 🔄 Function type changed: ldConfirmModal (Future<bool>Future<bool?>)

function ldFormConfirmDiscardEdits (lib/src/monkey/detail_editor/ld_monkey_discard_confirm.dart)

  • 🔄 Function type changed: ldFormConfirmDiscardEdits (Future<bool>Future<bool?>)

✨ Minor changes

class AppBarFrame (lib/src/appbar/appbar_frame.dart)

  • ❇️ Class added: AppBarFrame

extension DoubleToEdgeInsets (lib/src/appbar/appbar_frame.dart)

  • ❇️ Extension added: DoubleToEdgeInsets

class LdAppBar (lib/src/appbar/appbar.dart)

  • ❇️ Constructor added: fromConfig

class LdAppBarConfig (lib/src/appbar/appbar.dart)

  • ❇️ Methods added: copyWith, merge

extension LdAppBarScrollBehaviorExtension (lib/src/scaffold.dart)

  • ❇️ Extension added: LdAppBarScrollBehaviorExtension

class LdAvatar (lib/src/avatar.dart)

  • ❇️ Constructor added: fromConfig

class LdAvatarConfig (lib/src/avatar.dart)

  • ❇️ Methods added: copyWith, merge

class LdButton (lib/src/button.dart)

  • ❇️ Constructor added: fromConfig

class LdButtonConfig (lib/src/button.dart)

  • ❇️ Methods added: copyWith, merge

class LdCallbackModel<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • ❇️ Param added in default constructor: reorderItem (named, optional)
  • ❇️ Properties added: supportsReorder, reorderItem
  • ❇️ Param added in method greedy: reorderItem (named, optional)
  • ❇️ Method added: persistReorder

class LdCheckbox (lib/src/checkbox.dart)

  • ❇️ Constructor added: fromConfig

class LdCheckboxConfig (lib/src/checkbox.dart)

  • ❇️ Methods added: copyWith, merge

class LdCounter (lib/src/counter.dart)

  • ❌ Params removed in default constructor: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.headline)
  • ❇️ Param added in default constructor: style (named, optional)
  • ❇️ Property added: style
  • ❇️ Method added: createState

class LdDatePickerModal (lib/src/date_picker.dart)

  • ❇️ Class added: LdDatePickerModal

class LdInput (lib/src/input.dart)

  • ❇️ Param added in default constructor: padding (named, optional)
  • ❇️ Property added: padding

class LdList<T extends Identifiable (lib/src/list/list.dart)

  • ❇️ Constructor added: fromConfig

class LdListConfig<T extends Identifiable (lib/src/list/list.dart)

  • ❇️ Methods added: copyWith, merge

class LdListItem (lib/src/list/list_item.dart)

  • ❇️ Constructor added: fromConfig

class LdListItemConfig (lib/src/list/list_item.dart)

  • ❇️ Methods added: copyWith, merge

class LdMetaball (lib/src/metaball/metaball.dart)

  • ❇️ Param added in default constructor: force (named, optional, default: 1.0)
  • ❇️ Property added: force

class LdMetaballBlob (lib/src/metaball/metaball_blob.dart)

  • ❇️ Param added in default constructor: force (named, optional, default: 1.0)
  • ❇️ Property added: force
  • ❇️ Param added in method copyWith: force (named, optional)

class LdModel<T extends Identifiable (lib/src/monkey/data/ld_model.dart)

  • ❇️ Property added: supportsReorder
  • ❇️ Method added: persistReorder

class LdMonkeyAppBar<T extends Identifiable (lib/src/monkey/monkey_app_bar.dart)

  • ❌ Param removed in default constructor: additionalActions (named, optional, default: const [])
  • ❇️ Param added in default constructor: config (named, optional)
  • ❇️ Property added: config

class LdMonkeyAppbarConfig (lib/src/monkey/monkey_app_bar.dart)

  • ❇️ Class added: LdMonkeyAppbarConfig

class LdMonkeyDetailAppBars<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❇️ Class added: LdMonkeyDetailAppBars

class LdMonkeyDetailAppbarConfig (lib/src/monkey/monkey_app_bar.dart)

  • ❇️ Class added: LdMonkeyDetailAppbarConfig

class LdMonkeyDetailSecondaryAppbarConfig (lib/src/monkey/monkey_app_bar.dart)

  • ❇️ Class added: LdMonkeyDetailSecondaryAppbarConfig

class LdMonkeyMasterAppbarConfig (lib/src/monkey/monkey_app_bar.dart)

  • ❇️ Class added: LdMonkeyMasterAppbarConfig

class LdMonkeyMasterPage<T extends Identifiable (lib/src/monkey/monkey_master_page.dart)

  • ❌ Params removed in default constructor: primaryAppBarConfig (named, optional), primaryAppBarAdditionalActions (named, optional, default: const []), secondaryAppBarConfig (named, optional)

class LdMonkeyMasterSecondaryAppbarConfig (lib/src/monkey/monkey_app_bar.dart)

  • ❇️ Class added: LdMonkeyMasterSecondaryAppbarConfig

class LdMonkeyRouteScope<T extends Identifiable (lib/src/monkey/monkey_route_scope.dart)

  • ❌ Param removed in default constructor: reorderHandler (named, optional)

class LdMonkeyScrollableDetailPage<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❇️ Class added: LdMonkeyScrollableDetailPage

class LdMonkeySingleDetailPage<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❇️ Class added: LdMonkeySingleDetailPage

class LdMonkeyViewingBuilder<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❇️ Class added: LdMonkeyViewingBuilder

class LdNavigationRail (lib/src/drawer/navigation_rail.dart)

  • ❇️ Class added: LdNavigationRail

class LdNavigationTab (lib/src/appbar/tab_navigation.dart)

  • ❇️ Method added: matches

typedef LdReorderItemCallback<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • ❇️ Typedef added: LdReorderItemCallback

class LdRunnerStep (lib/src/runner.dart)

  • ❇️ Param added in default constructor: childrenLeftPadding (named, optional, default: 32)
  • ❇️ Property added: childrenLeftPadding

class LdScaffold (lib/src/scaffold.dart)

  • ❇️ Param added in default constructor: drawerMinWidth (named, optional, default: 200)
  • ❇️ Property added: drawerMinWidth

class LdScaffoldBody (lib/src/scaffold_body.dart)

  • ❇️ Params added in default constructor: reverse (named, optional, default: false), itemBuilder (named, optional), itemCount (named, optional), findChildIndexCallback (named, optional)
  • ❇️ Properties added: reverse, itemBuilder, itemCount, findChildIndexCallback

class LdSlider (lib/src/value_slider.dart)

  • ❇️ Params added in default constructor: onChangeEnd (named, optional), valueFormatter (named, optional)
  • ❇️ Params added in constructor range: onRangeChangeEnd (named, optional), valueFormatter (named, optional)
  • ❇️ Properties added: onChangeEnd, onRangeChangeEnd, valueFormatter

class LdSwitch (lib/src/switch.dart)

  • ❇️ Property added: activeIndex

class LdTheme (lib/src/theme/theme.dart)

  • ❇️ Methods added: controlContentPadding, controlHeight

class LdThemeProvider (lib/src/theme/theme_provider.dart)

  • ❇️ Param added in default constructor: applyWindowDecoration (named, optional, default: true)
  • ❇️ Property added: applyWindowDecoration

class MonkeyRouteNode<T extends Identifiable (lib/src/monkey/monkey_route_tree.dart)

  • ❌ Param removed in default constructor: reorderHandler (named, optional)

function buildMonkeyRoutes<T extends Identifiable (lib/src/monkey/monkey_routes.dart)

  • ❌ Param removed in function buildMonkeyRoutes: reorderHandler (named, optional)

function ldAppBarFocusScopeHasInputFocus (lib/src/appbar/appbar_frame.dart)

  • ❇️ Function added: ldAppBarFocusScopeHasInputFocus

function neutralGhostColor (lib/src/touchable/neutral_ghost_color.dart)

  • ❇️ Function added: neutralGhostColor

👀 Patch changes

class LdSubmitController<T, Arg> (lib/src/submit/model/submit_controller.dart)

  • ❇️ Properties added: _generation, _debugLabel
  • ❇️ Methods added: _logDebug, _isCurrentGeneration, _invalidateInFlight

class LdSwitch (lib/src/switch.dart)

  • 🔄 Method type changed: _buildItem (WidgetList<Widget>)

class _AppBarFrameState (lib/src/appbar/appbar_frame.dart)

  • ❇️ Class added: _AppBarFrameState

class _ButtonShape (lib/src/button.dart)

  • ❌ Property removed: _circularSizeBump

class _DatePickerSheet (lib/src/date_picker.dart)

  • ❌ Class removed: _DatePickerSheet

class _DatePickerSheetState (lib/src/date_picker.dart)

  • ❌ Class removed: _DatePickerSheetState

class _EmojiRaster (lib/src/emoji/emoji.dart)

  • ❇️ Class added: _EmojiRaster

class _LdCounterDigit (lib/src/counter.dart)

  • ❌ Properties removed: size, type
  • ❇️ Property added: style

class _LdCounterState (lib/src/counter.dart)

  • ❇️ Method added: _getStyle

class _LdCounterWidget (lib/src/counter.dart)

  • ❌ Class removed: _LdCounterWidget

class _LdDatePickerModalState (lib/src/date_picker.dart)

  • ❇️ Class added: _LdDatePickerModalState

class _LdDatePickerState (lib/src/date_picker.dart)

  • ❌ Property removed: _selectedDateNotifier

class _LdEmojiState (lib/src/emoji.dart)

  • ❌ Property removed: _offset
  • ❇️ Property added: _raster
  • ❌ Method removed: _compute

class _LdInputState (lib/src/input.dart)

  • ❌ Property removed: _shortcutBindings
  • ❇️ Property added: _isMultiline
  • ❇️ Methods added: _submitFromKeyboard, _insertNewline, _shouldSubmitOnEnter, _shortcutBindings

class _LdMonkeyViewingItemLoader<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❌ Properties removed: id, buildItem
  • ❇️ Properties added: ids, builder

class _LdMonkeyViewingItemSubmitBuilder<T extends Identifiable (lib/src/monkey/detail_page.dart)

  • ❌ Class removed: _LdMonkeyViewingItemSubmitBuilder

class _LdNavigationRailDestination (lib/src/drawer/navigation_rail.dart)

  • ❇️ Class added: _LdNavigationRailDestination

class _LdSliderHandle (lib/src/value_slider.dart)

  • ❌ Property removed: tooltipKey
  • ❇️ Property added: showTooltip

class _LdSliderHandleState (lib/src/value_slider.dart)

  • ➖ Method annotation removed: didUpdateWidget (@override)
  • ➕ Methods annotation added: didUpdateWidget (@mustCallSuper), didUpdateWidget (@protected)

class _LdSliderState (lib/src/value_slider.dart)

  • ❌ Properties removed: _lowTooltipKey, _highTooltipKey

meta pubspec.yaml (pubspec.yaml)

  • 📦 Added args: with version ^2.4.0
  • 📦 Added path: with version ^1.9.0

function _analysisFontSize (lib/src/emoji/emoji.dart)

  • ❇️ Function added: _analysisFontSize

function _computeTranslation (lib/src/emoji.dart)

  • ❌ Function removed: _computeTranslation

function _cropImage (lib/src/emoji/emoji.dart)

  • ❇️ Function added: _cropImage

function _findDeepestPoppableShell (lib/src/appbar/implied/back_button.dart)

  • ❇️ Function added: _findDeepestPoppableShell

function _getOrCompute (lib/src/emoji.dart)

  • 🔄 Function type changed: _getOrCompute (Future<Offset>Future<_EmojiRaster>)
  • 🔄 Param type changed in function _getOrCompute: compute (Future<Offset> Function()Future<_EmojiRaster> Function())

function _popShellMatch (lib/src/appbar/implied/back_button.dart)

  • ❇️ Function added: _popShellMatch

function _rasterizeEmoji (lib/src/emoji/emoji.dart)

  • ❇️ Function added: _rasterizeEmoji

function _renderEmoji (lib/src/emoji.dart)

  • ❌ Function removed: _renderEmoji

23.0.0-8 #

Released on: 7/10/2026, changelog automatically generated.

Bug Fixes #

  • use gesture detector for touchables again, but disable double tap on app bars since it adds touch delays. (bf9d097)
  • touchable: extract trackPan flag; honour hitTestBehavior in non-trackPan path (bd921b6)
  • list: remove spurious border on LdListItemLoading; fix timer leak in LdSlidableListItem; restrict marquee drag to mouse (a3aadf7)
  • selectable_list: move child argument last in GestureDetector (sort_child_properties_last) (c8745a5)

Features #

API Changes #

💣 Breaking changes

class LdListItemWidget (lib/src/list/list_item.dart)

  • 🔄 Superclass changed: StatelessWidgetStatefulWidget
  • ❌ Method removed: build

class LdMetaball (lib/src/metaball/metaball.dart)

  • ❌ Params removed in default constructor: children (named, required), surfaceColor (named, required), borderColor (named, required)
  • ❇️ Param added in default constructor: child (named, required)
  • ❌ Properties removed: children, blend, surfaceColor, borderColor, borderWidth, interactive

class LdMetaballChild (lib/src/metaball/metaball.dart)

  • ❌ Class removed: LdMetaballChild

class LdMetaballMask (lib/src/metaball/metaball_mask.dart)

  • 🔄 Param type changed in default constructor: borderShader (FragmentShaderFragmentShader?), borderColor (ColorColor?)
  • 🔄 Properties type changed: borderShader, borderColor

class LdMetaballMaskScoped (lib/src/metaball/metaball_mask.dart)

  • ❌ Class removed: LdMetaballMaskScoped

class LdMetaballShaderScope (lib/src/metaball/metaball_shader_scope.dart)

  • ❌ Class removed: LdMetaballShaderScope

class LdMetaballShaders (lib/src/metaball/metaball_shader_scope.dart)

  • ❌ Class removed: LdMetaballShaders

✨ Minor changes

class LdChooseLinkedListTrigger<T extends Identifiable (lib/src/choose/choose_linked_list_trigger.dart)

  • ❇️ Class added: LdChooseLinkedListTrigger

class LdChooseTriggerConfig<T extends Identifiable (lib/src/choose/choose.dart)

  • ❇️ Params added in default constructor: onRemoveItem (named, optional), allowEmpty (named, optional, default: false)
  • ❇️ Properties added: onRemoveItem, allowEmpty

class LdExceptionView (lib/src/exception/exception_view.dart)

  • ❇️ Param added in default constructor: showIndicator (named, optional, default: true)
  • ❇️ Property added: showIndicator

class LdListItem (lib/src/list/list_item.dart)

  • ❇️ Param added in default constructor: shadow (named, optional)
  • ❇️ Param added in constructor trailingForward: shadow (named, optional)
  • ❇️ Property added: shadow

class LdListItemConfig (lib/src/list/list_item.dart)

  • ❇️ Param added in default constructor: shadow (named, optional)
  • ❇️ Property added: shadow

class LdListItemWidget (lib/src/list/list_item.dart)

  • ❇️ Param added in default constructor: shadow (named, optional)
  • ❇️ Property added: shadow
  • ❇️ Method added: createState

class LdMetaball (lib/src/metaball/metaball.dart)

  • ❌ Params removed in default constructor: blend (named, optional, default: 40), borderWidth (named, optional, default: 1), interactive (named, optional, default: true)
  • ❇️ Params added in default constructor: shape (named, optional, default: LdMetaballShape.roundedRect), cornerRadius (named, optional, default: 16)
  • ❇️ Properties added: child, shape, cornerRadius

class LdMetaballMask (lib/src/metaball/metaball_mask.dart)

  • ✅ Params became optional in default constructor: borderShader (named, required), borderColor (named, required)
  • ❌ Param removed in method setUniforms: expand (named, optional, default: 0)
  • ❇️ Methods added: setFillUniforms, setBorderUniforms

class LdMetaballScope (lib/src/metaball/metaball.dart)

  • ❇️ Class added: LdMetaballScope

class LdSlidableListItem (lib/src/list/slidable_list_item.dart)

  • ❇️ Param added in default constructor: initialPeek (named, optional, default: true)
  • ❇️ Property added: initialPeek

class LdTheme (lib/src/theme/theme.dart)

  • ❇️ Properties added: monoFontFamily, monoFontFamilyPackage

class LdTouchableSurface (lib/src/touchable/touchable.dart)

  • ❇️ Param added in default constructor: trackPan (named, optional, default: false)
  • ❇️ Property added: trackPan

function ldButtonCircularPreview (lib/src/button.dart)

  • ❇️ Function added: ldButtonCircularPreview

function ldButtonDisabledPreview (lib/src/button.dart)

  • ❇️ Function added: ldButtonDisabledPreview

function ldButtonFilledPreview (lib/src/button.dart)

  • ❇️ Function added: ldButtonFilledPreview

function ldButtonGhostPreview (lib/src/button.dart)

  • ❇️ Function added: ldButtonGhostPreview

function ldButtonLeadingPreview (lib/src/button.dart)

  • ❇️ Function added: ldButtonLeadingPreview

function ldButtonOutlinePreview (lib/src/button.dart)

  • ❇️ Function added: ldButtonOutlinePreview

function ldHintPreview (lib/src/hint.dart)

  • ❇️ Function added: ldHintPreview

function ldHintWithBackgroundPreview (lib/src/hint.dart)

  • ❇️ Function added: ldHintWithBackgroundPreview

👀 Patch changes

class LdListItemWidget (lib/src/list/list_item.dart)

  • ❌ Methods removed: _buildSelectionControls, _buildIconTheme, _buildLeading, _buildTrailing, _buildTitle, _buildSubtitle, _buildSubContent

class LdMetaballMask (lib/src/metaball/metaball_mask.dart)

  • ❌ Method removed: _maskedLayer
  • ❇️ Method added: _writeCommon

class LdTheme (lib/src/theme/theme.dart)

  • ❇️ Properties added: _monoFontFamily, _monoFontFamilyPackage

class _LdListItemWidgetState (lib/src/list/list_item.dart)

  • ❇️ Class added: _LdListItemWidgetState

class _LdMetaballScopeData (lib/src/metaball/metaball.dart)

  • ❇️ Class added: _LdMetaballScopeData

class _LdMetaballScopeState (lib/src/metaball/metaball.dart)

  • ❇️ Class added: _LdMetaballScopeState

class _LdMetaballShaderData (lib/src/metaball/metaball_shader_scope.dart)

  • ❌ Class removed: _LdMetaballShaderData

class _LdMetaballShaderScopeState (lib/src/metaball/metaball_shader_scope.dart)

  • ❌ Class removed: _LdMetaballShaderScopeState

class _LdMetaballState (lib/src/metaball/metaball.dart)

  • ➖ Mixin removed: SingleTickerProviderStateMixin
  • ❌ Properties removed: _ticker, _tickerModeNotifier, _fill, _border, _ownedShaders, _children, _blobs, _pointerPos, _pointerDown, _radiusSpring, _radiusPeak, _radiusRest, _radiusOff, _bounceTimer, _lastTick
  • ❇️ Properties added: _key, _scope
  • ➖ Methods annotation removed: activate (@override), debugFillProperties (@override)
  • ➕ Methods annotation added: activate (@protected), activate (@mustCallSuper), debugFillProperties (@protected), debugFillProperties (@mustCallSuper)
  • ❌ Methods removed: createTicker, _updateTicker, _updateTickerModeNotifier, _rebuildChildren, _tryBorrowShaders, _loadOwnShaders, _onTick, _measureBlobs, _blobListEqual, _onPointerDown, _onPointerMove, _onPointerUp
  • ❇️ Method added: _measure

class _LdSlidableGroupState (lib/src/list/slidable_list_item.dart)

  • ❇️ Property added: _hintClaimed
  • ❇️ Method added: claimHint

class _LdSlidableListItemState (lib/src/list/slidable_list_item.dart)

  • ❌ Properties removed: _animationStart, _animationEnd, _isAnimating, _animationKey
  • ❇️ Properties added: _peekDelay, _peekDuration, _peekCompleted, _peekRunning, _peekDelayTimer, _peekDurationTimer, _contextMenuKey
  • ➖ Methods annotation removed: initState (@protected), initState (@mustCallSuper), didUpdateWidget (@mustCallSuper), didUpdateWidget (@protected)
  • ➕ Methods annotation added: initState (@override), didUpdateWidget (@override)
  • ❇️ Methods added: _maybeRunPeek, _handleSecondaryTapDown

class _LdSubmitDialogState<T, Arg> (lib/src/submit/builders/dialog_builder.dart)

  • ➖ Methods annotation removed: didChangeDependencies (@protected), didChangeDependencies (@mustCallSuper)
  • ➕ Method annotation added: didChangeDependencies (@override)
  • ❌ Methods removed: buildLoadingDialog, buildErrorDialog
  • ❇️ Method added: buildDialog

class _LdTouchableSurfaceState (lib/src/touchable/touchable.dart)

  • ❌ Property removed: _pointerDownOffset
  • ❇️ Method added: _buildGestureLayer

class _MetaballBorderPainter (lib/src/metaball/metaball_mask.dart)

  • ❇️ Class added: _MetaballBorderPainter

class _MetaballChild (lib/src/metaball/metaball.dart)

  • ❌ Class removed: _MetaballChild

23.0.0-7 #

Released on: 7/7/2026, changelog automatically generated.

Bug Fixes #

  • remove shaders/ from assets section in liquid_flutter pubspec (152e4ea)
  • resolve --fatal-infos analyzer warnings across packages (dcabf46)
  • update reactive forms tests to match current API (af496a7)
  • minor appbar issues, and adjust sizing slightly (42c8fbc)
  • tests: fix all failing tests across liquid_flutter package (13572f3)
  • tests: fix reactive-forms test failures and regenerate golden trees (eec4716)

Features #

  • add Tab + PageView component and update routing for new demo (fb02cab)
  • add new skills for Liquid Flutter including EMD theme, Markdown rendering, reactive forms, and window utilities (7c5aae1)
  • emoji pickers, markdown editor, refactor details forms etc. (7dc69bd)

API Changes #

💣 Breaking changes

class LdAvatar (lib/src/avatar.dart)

  • ❌ Property removed: emoji

class LdCallbackModel<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • 🔄 Method type changed: update (Future<void>Future<T?>)

class LdForm (lib/src/form.dart)

  • ❌ Class removed: LdForm

class LdFormHint (lib/src/form.dart)

  • ❌ Class removed: LdFormHint

class LdFormItem (lib/src/form.dart)

  • ❌ Class removed: LdFormItem

class LdHint (lib/src/hint.dart)

  • ❌ Param removed in constructor info: type (named, required)
  • ❌ Param removed in constructor warning: type (named, required)
  • ❌ Param removed in constructor success: type (named, required)
  • ❌ Param removed in constructor error: type (named, required)
  • ❌ Param removed in constructor canceled: type (named, required)
  • ❌ Param removed in constructor loading: type (named, required)
  • ❌ Param removed in constructor pending: type (named, required)
  • ❌ Param removed in constructor ongoing: type (named, required)

class LdIndicator (lib/src/indicators.dart)

  • ❌ Param removed in constructor info: type (named, required)
  • ❌ Param removed in constructor warning: type (named, required)
  • ❌ Param removed in constructor canceled: type (named, required)
  • ❌ Param removed in constructor error: type (named, required)
  • ❌ Param removed in constructor success: type (named, required)
  • ❌ Param removed in constructor loading: type (named, required)
  • ❌ Param removed in constructor pending: type (named, required)
  • ❌ Param removed in constructor ongoing: type (named, required)

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • 🔄 Method type changed: updateFromModel (Future<void>Future<T?>)

class LdModel<T extends Identifiable (lib/src/monkey/data/ld_model.dart)

  • 🔄 Method type changed: update (Future<void>Future<T?>)

class LdSubmitController<T, Arg> (lib/src/submit/model/submit_controller.dart)

  • ❌ Property removed: canRetrigger

class LdTabNavigation (lib/src/appbar/tab_navigation.dart)

  • 🔄 Param type changed in default constructor: activeRoute (StringString?)
  • 🔄 Property type changed: activeRoute

class LdWrapConditional (lib/src/conditional_parent.dart)

  • 🔄 Superclass changed: StatelessWidgetStatefulWidget
  • ❌ Method removed: build

class LiquidLocalizations (lib/src/l10n/generated/liquid_localizations.dart)

  • ❌ Properties removed: fieldConflictYours, fieldConflictServer

function ldMonkeyConfirmDiscardEdits (lib/src/monkey/detail_editor/ld_monkey_discard_confirm.dart)

  • ❌ Function removed: ldMonkeyConfirmDiscardEdits

✨ Minor changes

class LdAppBar (lib/src/appbar/appbar.dart)

  • ❌ Param removed in constructor top: positionMode (named, optional)
  • ❌ Param removed in constructor bottom: positionMode (named, optional)

class LdAvatar (lib/src/avatar.dart)

  • ❌ Param removed in default constructor: emoji (named, optional, default: false)
  • ❌ Param removed in method success: emoji (named, optional, default: false)
  • ❌ Param removed in method warning: emoji (named, optional, default: false)
  • ❌ Param removed in method error: emoji (named, optional, default: false)

class LdButton (lib/src/button.dart)

  • ❇️ Param added in default constructor: onHover (named, optional)
  • ❌ Param removed in constructor ghost: mode (named, optional)
  • ❇️ Param added in constructor ghost: onHover (named, optional)
  • ❌ Param removed in constructor vague: mode (named, optional)
  • ❇️ Param added in constructor vague: onHover (named, optional)
  • ❌ Param removed in constructor outline: mode (named, optional)
  • ❇️ Param added in constructor outline: onHover (named, optional)
  • ❌ Param removed in constructor filled: mode (named, optional)
  • ❇️ Param added in constructor filled: onHover (named, optional)
  • ❇️ Property added: onHover
  • ❇️ Param added in method warning: onHover (named, optional)
  • ❇️ Param added in method error: onHover (named, optional)
  • ❇️ Param added in method success: onHover (named, optional)

class LdButtonConfig (lib/src/button.dart)

  • ❇️ Param added in default constructor: onHover (named, optional)
  • ❇️ Property added: onHover

class LdCheckboxConfig (lib/src/checkbox.dart)

  • ❇️ Param added in default constructor: label (named, optional)
  • ❇️ Property added: label

class LdChoose<T extends Identifiable (lib/src/choose/choose.dart)

  • ❇️ Param added in default constructor: actions (named, optional, default: const [])
  • ❇️ Property added: actions

class LdColorBundle (lib/src/touchable/touchable_colors.dart)

  • ❇️ Class added: LdColorBundle

class LdCounter (lib/src/counter.dart)

  • ❌ Param removed in constructor s: size (named, optional, default: LdSize.m)
  • ❌ Param removed in constructor l: size (named, optional, default: LdSize.m)
  • ❌ Param removed in constructor xs: size (named, optional, default: LdSize.m)

class LdEmoji (lib/src/emoji.dart)

  • ❇️ Class added: LdEmoji

class LdEmojiCategory (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: LdEmojiCategory

class LdEmojiEntry (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: LdEmojiEntry

class LdEmojiPickerModal (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: LdEmojiPickerModal

class LdFilterSearch<T extends Identifiable (lib/src/monkey/filter/ld_filter_search.dart)

  • ❇️ Param added in method searchConfig: inputFocusNode (named, optional)

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • ❇️ Properties added: deletedItems, detachedItemsById
  • ❇️ Method added: removeItemById

class LdListItem (lib/src/list/list_item.dart)

  • ❌ Param removed in constructor trailingForward: trailing (named, optional)

class LdMetaball (lib/src/metaball/metaball.dart)

  • ❇️ Class added: LdMetaball

class LdMetaballBlob (lib/src/metaball/metaball_blob.dart)

  • ❇️ Class added: LdMetaballBlob

class LdMetaballChild (lib/src/metaball/metaball.dart)

  • ❇️ Class added: LdMetaballChild

class LdMetaballMask (lib/src/metaball/metaball_mask.dart)

  • ❇️ Class added: LdMetaballMask

class LdMetaballMaskScoped (lib/src/metaball/metaball_mask.dart)

  • ❇️ Class added: LdMetaballMaskScoped

class LdMetaballShaderScope (lib/src/metaball/metaball_shader_scope.dart)

  • ❇️ Class added: LdMetaballShaderScope

class LdMetaballShaders (lib/src/metaball/metaball_shader_scope.dart)

  • ❇️ Class added: LdMetaballShaders

enum LdMetaballShape (lib/src/metaball/metaball_blob.dart)

  • ❇️ Enum added: LdMetaballShape

class LdMonkeySearchFocusNode (lib/src/monkey/monkey_shell.dart)

  • ❇️ Class added: LdMonkeySearchFocusNode

class LdMonkeySelection<T extends Identifiable (lib/src/monkey/monkey_selection.dart)

  • ❇️ Method added: toString

class LdPaginator<T extends Identifiable (lib/src/list/list_paginator.dart)

  • ❇️ Method added: removeItemById

class LdSearchConfig (lib/src/appbar/search_config.dart)

  • ❇️ Property added: inputFocusNode

class LdSubmit<T, Arg> (lib/src/submit/submit.dart)

  • ❇️ Param added in default constructor: disabled (named, optional)
  • ❇️ Property added: disabled

class LdSubmitController<T, Arg> (lib/src/submit/model/submit_controller.dart)

  • ❇️ Properties added: isDisabled, disabled

class LdTabNavigation (lib/src/appbar/tab_navigation.dart)

  • ✅ Param became optional in default constructor: activeRoute (named, required)
  • ❇️ Param added in default constructor: pageController (named, optional)
  • ❇️ Property added: pageController

class LdText (lib/src/text.dart)

  • ❌ Param removed in constructor caption: type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor h: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor hl: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor hs: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor hxs: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Param removed in constructor l: type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor ll: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor ls: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor lxs: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Param removed in constructor p: type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor pl: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor ps: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)
  • ❌ Params removed in constructor pxs: size (named, optional, default: LdSize.m), type (named, optional, default: LdTextType.paragraph)

class LdTheme (lib/src/theme/theme.dart)

  • ❇️ Property added: fontFamilyFallback

class LdTouchableStatus (lib/src/touchable/touchable_status.dart)

  • ❇️ Class added: LdTouchableStatus

class LdTouchableSurface (lib/src/touchable/touchable.dart)

  • ❇️ Param added in default constructor: onHover (named, optional)
  • ❇️ Property added: onHover

class LdWrapConditional (lib/src/conditional_parent.dart)

  • ❇️ Method added: createState

class LiquidLocalizations (lib/src/l10n/generated/liquid_localizations.dart)

  • ❇️ Properties added: fieldConflictKeepMine, fieldConflictUseServer, save, saving, create, creating, discardChanges

class _LdAvatarWidget (lib/src/avatar.dart)

  • ❌ Param removed in default constructor: emoji (named, optional, default: false)

class _LdButtonWidget (lib/src/button.dart)

  • ❇️ Param added in default constructor: onHover (named, optional)

function ghostColor (lib/src/touchable/ghost_color.dart)

  • ❇️ Function added: ghostColor

function inputColor (lib/src/touchable/input_color.dart)

  • ❇️ Function added: inputColor

function ldFormConfirmDiscardEdits (lib/src/monkey/detail_editor/ld_monkey_discard_confirm.dart)

  • ❇️ Function added: ldFormConfirmDiscardEdits

function solidColor (lib/src/touchable/solid_color.dart)

  • ❇️ Function added: solidColor

👀 Patch changes

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • ❌ Methods removed: _confirmDeletionForId, _confirmPagedDeletion
  • ❇️ Method added: _maybeRefreshPostDeletion

class LdSubmitController<T, Arg> (lib/src/submit/model/submit_controller.dart)

  • ❇️ Property added: _isDisabled

class LdTheme (lib/src/theme/theme.dart)

  • ❇️ Property added: _fontFamilyFallback

class _EmojiCell (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: _EmojiCell

class _EmojiGrid (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: _EmojiGrid

class _LdAvatarWidget (lib/src/avatar.dart)

  • ❌ Property removed: emoji

class _LdButtonWidget (lib/src/button.dart)

  • ❇️ Property added: onHover

class _LdCheckboxWidget (lib/src/checkbox.dart)

  • ➕ Constructor annotation added: new (@ContextConfigurable())
  • ➖ Params annotation removed: (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable())

class _LdEmojiPickerModalState (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: _LdEmojiPickerModalState

class _LdEmojiState (lib/src/emoji.dart)

  • ❇️ Class added: _LdEmojiState

class _LdFormState (lib/src/form.dart)

  • ❌ Class removed: _LdFormState

class _LdMetaballShaderData (lib/src/metaball/metaball_shader_scope.dart)

  • ❇️ Class added: _LdMetaballShaderData

class _LdMetaballShaderScopeState (lib/src/metaball/metaball_shader_scope.dart)

  • ❇️ Class added: _LdMetaballShaderScopeState

class _LdMetaballState (lib/src/metaball/metaball.dart)

  • ❇️ Class added: _LdMetaballState

class _LdMonkeyShellState<T extends Identifiable (lib/src/monkey/monkey_shell.dart)

  • ❇️ Property added: _searchFocusNode
  • ➖ Methods annotation removed: dispose (@protected), dispose (@mustCallSuper)
  • ➕ Method annotation added: dispose (@override)

class _LdSearchInputState (lib/src/appbar/search_components.dart)

  • ❌ Modifier final removed from property: _inputFocusNode
  • ❇️ Modifier late added to property: _inputFocusNode

class _LdTabNavigationState (lib/src/appbar/tab_navigation.dart)

  • ❇️ Properties added: _currentPageIndex, _springOverridden
  • ➖ Methods annotation removed: initState (@protected), initState (@mustCallSuper)
  • ➕ Method annotation added: initState (@override)
  • ❌ Param removed in method _onTabTap: route (positional, required)
  • ❇️ Param added in method _onTabTap: tabIndex (positional, required)
  • ❇️ Methods added: _attachPageController, _detachPageController, _onPageControllerUpdate, _updateIndicatorFromPage

class _LdTouchableSurfaceState (lib/src/touchable/touchable.dart)

  • ❇️ Property added: _isHovering

class _LdWrapConditionalState (lib/src/conditional_parent.dart)

  • ❇️ Class added: _LdWrapConditionalState

class _MetaballChild (lib/src/metaball/metaball.dart)

  • ❇️ Class added: _MetaballChild

class _SkinTonePicker (lib/src/emoji_picker/emoji_picker.dart)

  • ❇️ Class added: _SkinTonePicker

class _SpringSim (lib/src/metaball/metaball.dart)

  • ❇️ Class added: _SpringSim

function _computeTranslation (lib/src/emoji.dart)

  • ❇️ Function added: _computeTranslation

function _getOrCompute (lib/src/emoji.dart)

  • ❇️ Function added: _getOrCompute

function _isInputLike (lib/src/autospace.dart)

  • ❇️ Function added: _isInputLike

function _renderEmoji (lib/src/emoji.dart)

  • ❇️ Function added: _renderEmoji

function _resolveSize (lib/src/emoji.dart)

  • ❇️ Function added: _resolveSize

23.0.0-6 #

Released on: 7/2/2026, changelog automatically generated.

Bug Fixes #

API Changes #

💣 Breaking changes

class CloseDrawerButton (lib/src/appbar/drawer_buttons.dart)

  • ❌ Class removed: CloseDrawerButton

class LdAppBar (lib/src/appbar/appbar.dart)

  • ❌ Properties removed: implyLeading, showWindowControls, implyCloseModalButton

class LdAppBarConfig (lib/src/appbar/appbar.dart)

  • ❌ Properties removed: implyCloseModalButton, implyLeading, showWindowControls

class LdAppBarParentShowsImpliedLeading (lib/src/appbar/appbar.dart)

  • ❌ Class removed: LdAppBarParentShowsImpliedLeading

class LdAppBarScrollNotification (lib/src/appbar/appbar_scroll_notifier.dart)

  • ❇️ Param added in default constructor: momentumVelocity (named, required)

class LdAppBarWidget (lib/src/appbar/appbar.dart)

  • ❌ Properties removed: implyLeading, showWindowControls, implyCloseModalButton

class LdBottomBar (lib/src/appbar/bottom_bar.dart)

  • ❌ Class removed: LdBottomBar

class LdCallbackModel<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • 🔄 Param type changed in default constructor: updateBatchFn (Future<void> Function(BuildContext, Set<T>)?Future<void> Function(BuildContext, Map<IdType, T>)?)
  • 🔄 Properties type changed: cache, updateBatchFn
  • 🔄 Param type changed in method persistUpdateBatch: items (Set<T>Map<IdType, T>)
  • 🔄 Param type changed in method updateBatch: items (Set<T>Map<IdType, T>)
  • 🔄 Param type changed in method greedy: updateBatch (Future<void> Function(BuildContext, Set<L>)?Future<void> Function(BuildContext, Map<IdType, L>)?)

class LdChooseTriggerConfig<T extends Identifiable (lib/src/choose/choose.dart)

  • 🔄 Param type changed in default constructor: hint (Widget?Widget)
  • 🔄 Property type changed: hint

class LdList<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Property removed: assumedItemHeight

class LdListConfig<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Property removed: assumedItemHeight

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • 🔄 Properties type changed: fetchListFunction, model
  • ❌ Methods removed: ensureSelectionAnchored, ensureSelectionLoaded
  • 🔄 Param type changed in method updateBatchFromModel: items (Set<TUpdate>Map<IdType, TUpdate>)

class LdListItem (lib/src/list/list_item.dart)

  • 🔄 Param type changed in default constructor: selectDisabled (boolbool?), tradeLeadingForSelectionControl (boolbool?)
  • 🔄 Param type changed in constructor trailingForward: selectDisabled (boolbool?), tradeLeadingForSelectionControl (boolbool?)
  • 🔄 Properties type changed: selectDisabled, tradeLeadingForSelectionControl

class LdListWidget<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Property removed: assumedItemHeight

class LdModel<T extends Identifiable (lib/src/monkey/data/ld_model.dart)

  • 🔄 Property type changed: cache
  • 🔄 Param type changed in method persistUpdateBatch: items (Set<TUpdate>Map<IdType, TUpdate>)
  • 🔄 Param type changed in method updateBatch: items (Set<TUpdate>Map<IdType, TUpdate>)

class LdMonkeyAppBar<T extends Identifiable (lib/src/monkey/monkey_app_bar.dart)

  • ❌ Property removed: implyLeading

class LdMonkeyRouteScope<T extends Identifiable (lib/src/monkey/monkey_route_scope.dart)

  • ❌ Property removed: detailPanelFlex

class LdMonkeyShell<T extends Identifiable (lib/src/monkey/monkey_shell.dart)

  • ❌ Property removed: detailPanelFlex

class LdPaginator<T extends Identifiable (lib/src/list/list_paginator.dart)

  • 🔄 Param type changed in default constructor: fetchListFunction (Future<LdListPage<T>> Function(FetchPageParameters<T, IdType>)?Future<LdListPage<T>> Function(FetchPageParameters<T, IdType>))
  • ⚠️ Param became required in default constructor: fetchListFunction (named, optional)
  • 🔄 Property type changed: fetchListFunction

class LdSelectableList<T extends Identifiable (lib/src/list/selectable_list.dart)

  • ❌ Param removed in default constructor: paginator (named, required)
  • ❇️ Param added in default constructor: listController (named, required)
  • ❌ Property removed: paginator

class MonkeyRouteNode<T extends Identifiable (lib/src/monkey/monkey_route_tree.dart)

  • ❌ Property removed: detailPanelFlex

class OpenDrawerButton (lib/src/appbar/drawer_buttons.dart)

  • ❌ Class removed: OpenDrawerButton

class _MonkeyShellLayoutBuilder<T extends Identifiable (lib/src/monkey/monkey_shell.dart)

  • ❌ Param removed in default constructor: detailPanelFlex (named, required)
  • ❇️ Param added in default constructor: detailPanelFraction (named, required)

✨ Minor changes

class LdAppBar (lib/src/appbar/appbar.dart)

  • ❌ Params removed in default constructor: implyCloseModalButton (named, optional), implyLeading (named, optional), showWindowControls (named, optional)
  • ❇️ Param added in default constructor: implyFeatures (named, optional)
  • ❌ Params removed in constructor top: implyCloseModalButton (named, optional), implyLeading (named, optional), showWindowControls (named, optional)
  • ❇️ Param added in constructor top: implyFeatures (named, optional)
  • ❌ Params removed in constructor bottom: implyCloseModalButton (named, optional), implyLeading (named, optional), showWindowControls (named, optional)
  • ❇️ Param added in constructor bottom: implyFeatures (named, optional)
  • ❇️ Property added: implyFeatures

class LdAppBarBackButton (lib/src/appbar/implied/back_button.dart)

  • ❇️ Class added: LdAppBarBackButton

class LdAppBarCloseModalButton (lib/src/appbar/implied/close_modal_button.dart)

  • ❇️ Class added: LdAppBarCloseModalButton

class LdAppBarConfig (lib/src/appbar/appbar.dart)

  • ❌ Params removed in default constructor: implyCloseModalButton (named, optional), implyLeading (named, optional), showWindowControls (named, optional)
  • ❇️ Param added in default constructor: implyFeatures (named, optional)
  • ❇️ Property added: implyFeatures

enum LdAppBarImpliedFeature (lib/src/appbar/implied/implied_features.dart)

  • ❇️ Enum added: LdAppBarImpliedFeature

class LdAppBarImpliedFeatures (lib/src/appbar/implied/implied_features.dart)

  • ❇️ Class added: LdAppBarImpliedFeatures

extension LdAppBarImpliedFeaturesExtension (lib/src/appbar/implied/implied_features.dart)

  • ❇️ Extension added: LdAppBarImpliedFeaturesExtension

class LdAppBarMetrics (lib/src/appbar/appbar_state.dart)

  • ❇️ Property added: isModal
  • ❇️ Method added: reset

extension LdAppBarPositionExtension (lib/src/appbar/appbar_state.dart)

  • ❇️ Extension added: LdAppBarPositionExtension

class LdAppBarScrollNotification (lib/src/appbar/appbar_scroll_notifier.dart)

  • ❇️ Property added: momentumVelocity

class LdAppBarWidget (lib/src/appbar/appbar.dart)

  • ❌ Params removed in default constructor: implyCloseModalButton (named, optional, default: true), implyLeading (named, optional), showWindowControls (named, optional, default: true)
  • ❇️ Param added in default constructor: implyFeatures (named, optional, default: const {LdAppBarImpliedFeature.back, LdAppBarImpliedFeature.close, LdAppBarImpliedFeature.windowControls, LdAppBarImpliedFeature.drawerToggle})
  • ❇️ Property added: implyFeatures

class LdCallbackModel<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • ❌ Modifier final removed from property: cache
  • ❇️ Methods added: fetchListWithParametersCached, invalidateCacheOnMutation

class LdDrawerButton (lib/src/appbar/implied/drawer_buttons.dart)

  • ❇️ Class added: LdDrawerButton

enum LdDrawerButtonType (lib/src/appbar/implied/drawer_buttons.dart)

  • ❇️ Enum added: LdDrawerButtonType

extension LdDrawerSlotExtension (lib/src/scaffold.dart)

  • ❇️ Extension added: LdDrawerSlotExtension

class LdList<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Param removed in default constructor: assumedItemHeight (named, optional)

class LdListCacheKeyPart (lib/src/monkey/data/ld_list_cache_key.dart)

  • ❇️ Class added: LdListCacheKeyPart

class LdListConfig<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Param removed in default constructor: assumedItemHeight (named, optional)

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • ❌ Modifier factory removed from constructor: fromModel
  • ❇️ Constructor added: new
  • ❇️ Method added: onTransientItemsEvictedByRefresh

class LdListEmpty (lib/src/list/list_empty.dart)

  • ❇️ Params added in default constructor: hasActiveFilters (named, optional, default: false), onClearFilters (named, optional)
  • ❇️ Properties added: hasActiveFilters, onClearFilters

class LdListItem (lib/src/list/list_item.dart)

  • ❇️ Param added in default constructor: isOdd (named, optional)
  • ❇️ Param added in constructor trailingForward: isOdd (named, optional)
  • ❇️ Property added: isOdd

class LdListItemConfig (lib/src/list/list_item.dart)

  • ❇️ Params added in default constructor: leading (named, optional), selectDisabled (named, optional), subContent (named, optional), subtitle (named, optional), title (named, optional), tradeLeadingForSelectionControl (named, optional), width (named, optional), isOdd (named, optional)
  • ❇️ Properties added: leading, selectDisabled, subContent, subtitle, title, tradeLeadingForSelectionControl, width, isOdd

class LdListItemWidget (lib/src/list/list_item.dart)

  • ❇️ Param added in default constructor: isOdd (named, optional, default: false)
  • ❇️ Property added: isOdd

enum LdListMutationKind (lib/src/monkey/data/ld_list_cache_key.dart)

  • ❇️ Enum added: LdListMutationKind

class LdListWidget<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Param removed in default constructor: assumedItemHeight (named, optional)

extension LdModalRouteExtension (lib/src/modal/modal.dart)

  • ❇️ Extension added: LdModalRouteExtension

class LdModel<T extends Identifiable (lib/src/monkey/data/ld_model.dart)

  • ❇️ Methods added: fetchListWithParametersCached, invalidateCacheOnMutation

class LdMonkeyAppBar<T extends Identifiable (lib/src/monkey/monkey_app_bar.dart)

  • ❌ Param removed in default constructor: implyLeading (named, optional)

class LdMonkeyRouteScope<T extends Identifiable (lib/src/monkey/monkey_route_scope.dart)

  • ❌ Param removed in default constructor: detailPanelFlex (named, optional)
  • ❇️ Param added in default constructor: detailPanelFraction (named, optional)
  • ❇️ Property added: detailPanelFraction

class LdMonkeyShell<T extends Identifiable (lib/src/monkey/monkey_shell.dart)

  • ❌ Param removed in default constructor: detailPanelFlex (named, optional, default: 2)
  • ❇️ Param added in default constructor: detailPanelFraction (named, optional, default: 0.3)
  • ❇️ Property added: detailPanelFraction

class LdMultiPanelLayout (lib/src/multi_panel/multi_panel_layout.dart)

  • ❇️ Params added in default constructor: minBodyWidth (named, optional), insetBody (named, optional, default: false)
  • ❇️ Properties added: minBodyWidth, insetBody

class LdPaginator<T extends Identifiable (lib/src/list/list_paginator.dart)

  • ❇️ Method added: onTransientItemsEvictedByRefresh

class LdPartialBatchDeleteException (lib/src/monkey/data/ld_list_cache_key.dart)

  • ❇️ Class added: LdPartialBatchDeleteException

class LdSelectableList<T extends Identifiable (lib/src/list/selectable_list.dart)

  • ❇️ Property added: listController

class LiquidLocalizations (lib/src/l10n/generated/liquid_localizations.dart)

  • ❇️ Properties added: noItemsMatchFilter, clearFilters

class MacOSWindowControls (lib/src/appbar/implied/macos_window_controls.dart)

  • ❇️ Class added: MacOSWindowControls

class MonkeyRouteNode<T extends Identifiable (lib/src/monkey/monkey_route_tree.dart)

  • ❌ Param removed in default constructor: detailPanelFlex (named, optional)
  • ❇️ Param added in default constructor: detailPanelFraction (named, optional)
  • ❇️ Property added: detailPanelFraction

class WindowsWindowControls (lib/src/appbar/implied/windows_window_controls.dart)

  • ❇️ Class added: WindowsWindowControls

class _LdMonkeySelectionHydrator<T extends Identifiable (lib/src/monkey/monkey_router_adapter.dart)

  • ❇️ Param added in default constructor: key (named, optional)

function buildMonkeyRoutes<T extends Identifiable (lib/src/monkey/monkey_routes.dart)

  • ❌ Param removed in function buildMonkeyRoutes: detailPanelFlex (named, optional)
  • ❇️ Param added in function buildMonkeyRoutes: detailPanelFraction (named, optional)

function ldListCacheKey<T extends Identifiable (lib/src/monkey/data/ld_list_cache_key.dart)

  • ❇️ Function added: ldListCacheKey

function parseLdListCacheKey (lib/src/monkey/data/ld_list_cache_key.dart)

  • ❇️ Function added: parseLdListCacheKey

👀 Patch changes

class LdCallbackModel<T extends Identifiable (lib/src/monkey/data/ld_callback_model.dart)

  • ➖ Property annotation removed: cache (@override)
  • ❇️ Properties added: _ownedCache, _providedCache

class LdListController<T extends Identifiable (lib/src/monkey/data/list_controller.dart)

  • ❌ Constructor removed: _
  • ❌ Properties removed: _isGreedy, _autoCache, _autoInvalidateCache, _autoInvalidateCacheOnMutation
  • 🔄 Property type changed: _attachedModel
  • ❇️ Property added: _refreshInProgress
  • ❇️ Param added in method _addToOffsetQueue: immediate (named, optional, default: false)
  • 🔄 Method type changed: _fetchItems (Future<List<T>>Future<bool>), _insertPageItems (List<T>bool)
  • ❌ Methods removed: _fetchWithAutoCache, _maybeInvalidateOnMutation, _idFromUpdatePayload
  • ✏️ Param renamed in method initWithSelection: selectionselectedIds

class LdListItemWidget (lib/src/list/list_item.dart)

  • ➕ Constructor annotation added: new (@ContextConfigurable())
  • ➖ Params annotation removed: (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), (@ContextConfigurable()), `` (@ContextConfigurable())

class LdModel<T extends Identifiable (lib/src/monkey/data/ld_model.dart)

  • ❇️ Property added: _ownedCache

class LdPaginator<T extends Identifiable (lib/src/list/list_paginator.dart)

  • ❇️ Param added in method _addToOffsetQueue: immediate (named, optional, default: false)
  • 🔄 Method type changed: _fetchItems (Future<List<T>>Future<bool>), _insertPageItems (List<T>bool)

class LdScaffoldState (lib/src/scaffold.dart)

  • ❌ Property removed: _isSurface
  • 🔄 Property type changed: _scaffoldDecoration

class LdSelectableListState<T extends Identifiable (lib/src/list/selectable_list.dart)

  • ❇️ Method added: _tryScrollToInitialSelection

class _LdAppBarScrollNotifierState (lib/src/appbar/appbar_scroll_notifier.dart)

  • ❇️ Property added: _lastMomentumFrameTime
  • ❇️ Method added: _momentumVelocity

class _LdAppBarWidgetState (lib/src/appbar/appbar.dart)

  • ❌ Properties removed: _isModal, _canDismissModal, _drawerBlocksImplyLeading, _canPopParentRoute, _drawerSlot, _isDrawer
  • ❌ Methods removed: _closeModalButton, _popParentRoute, _findDrawerParent, _buildLeading, _shouldImplyRouteBack, _showWindowsWindowControls

class _LdListReorderScopeState<T extends Identifiable (lib/src/list/reorderable_list.dart)

  • ❌ Property removed: _isMobile

class _LdListState<T extends Identifiable (lib/src/list/list.dart)

  • ❌ Properties removed: _performedInitialScroll, _pendingScrollAttempts, _maxPendingScrollAttempts
  • ❌ Methods removed: _getAverageItemHeight, _maybeScrollToPendingItem, _scrollPendingItemIntoView, _maybePerformInitialScroll

class _LdMultiPanelLayoutState (lib/src/multi_panel/multi_panel_layout.dart)

  • ❇️ Properties added: _internalPanelFraction, _appliedPanelWidth, _bodyBorderSide, _panelIsLeft, _insetBody, _bodyDecoration, _insetPadding, _bodyMargin, _additionalDrawerPadding

class _LdToggleState (lib/src/toggle.dart)

  • ❌ Property removed: _controller
  • ➖ Method annotation removed: didUpdateWidget (@override)
  • ➕ Methods annotation added: didUpdateWidget (@mustCallSuper), didUpdateWidget (@protected)
  • ❌ Method removed: _updateStatus

class _MonkeyShellLayoutBuilder<T extends Identifiable (lib/src/monkey/monkey_shell.dart)

  • ❌ Property removed: detailPanelFlex
  • ❇️ Property added: detailPanelFraction

meta pubspec.yaml (pubspec.yaml)

  • 📦 Added meta: with version ^1.9.0

function _goRouterCanPop (lib/src/appbar/implied/back_button.dart)

  • ❇️ Function added: _goRouterCanPop

function _goRouterShellNavigatorCanPop (lib/src/appbar/appbar.dart)

  • ❌ Function removed: _goRouterShellNavigatorCanPop

function _isDescendant (lib/src/appbar/implied/back_button.dart)

  • ❇️ Function added: _isDescendant

23.0.0-5 #

Released on: 6/28/2026, changelog automatically generated.

23.0.0-4 #

Released on: 6/23/2026, changelog automatically generated.

Unreleased #

Breaking changes #

  • LdListCache: rename LdRepositoryCache / LdRepositoryCacheEntry / LdRepositoryCacheKeyPart / LdRepositoryMutationKind to LdListCache* / LdListMutationKind; rename ldRepositoryCacheKey / parseLdRepositoryCacheKey to ldListCacheKey / parseLdListCacheKey
  • LdPaginator: rename repositoryCache parameter and field to listCache
  • LdMonkeyDetailState: rename repository field to listController
  • LdMonkeyListFilterAdapter: rename from LdMonkeyRepositoryFilterAdapter (monkey_list_filter_adapter.dart)
  • Tests: rename createTestRepository to createTestListController; rename repository_test.dart to list_controller_test.dart
  • Remove deprecated mutationAffectsCache on filter/sort options, LdMutationAffectsCache typedef, and LdMonkeyAction.build() — use affectedByUpdate and buildTrigger instead
  • Stop exporting internal monkey helpers: resolveMonkeyRouteDefinitions, ldListCacheKey, parseLdListCacheKey, LdListCacheKeyPart, and LdListMutationKind

23.0.0-3 #

Released on: automatic fallback dev bump to avoid duplicate 23.0.0-2 publish.

Features #

  • LdRepository: add affectedByUpdate on filter/sort options (replaces deprecated mutationAffectsCache) for shared cache invalidation and paginator layout decisions
  • LdPaginator: add repositionItemById, safe delete compaction (canCompactIndicesAfterDeletion / compactIndicesAfterDeletion), and reposition-or-refresh mutation flows in LdRepository

Deprecations #

  • mutationAffectsCache on LdFilterOption / LdSortOption — use affectedByUpdate instead
  • LdMutationAffectsCache typedef — use LdAffectedByUpdate instead

Older versions #

See CHANGELOG_ARCHIVE.md for earlier releases.