NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A customizable expandable cart quantity stepper widget for Flutter with async support, loading indicators, and theming.
Last release 2 months ago
13 Jul 2026
Ships fairly regularly
a new release about every 3 months
Most releases are documented
notes for 7 of 8 stable releases
Nothing withdrawn
no release was ever pulled
8 months old
8 releases · first in 2026
One column per month.
iOS confirm/cancel in inline edit mode now apply correctly. Tapping ✓ or ✕ while the keyboard was open only dismissed the keyboard and left the quanti
TextFieldTapRegion (and guarded against focus-loss races) so the tap reaches confirm/cancel instead of being treated as "tap outside".Inline edit mode for manual input. Tapping the quantity now turns the stepper into an editor in place: the number becomes a text field and the - / + b
- / + buttons swap for cancel (✕) and confirm (✓) actions. Configure it via CartStepperManualInputConfig:
showEditActions (default true) — set to false to keep - / + visible while editingcancelIcon / confirmIcon — icon overrides (default Icons.close / Icons.check)editIconSize — size of the cancel/confirm icons, defaults to the stepper's normal icon sizecancelIconColor / confirmIconColor — default to the stepper's foreground colorcancelBackgroundColor / confirmBackgroundColor — circular button backgrounds, transparent by defaulteditBackgroundColor / editForegroundColor — recolor the whole pill (and the number) while editing; default to the stepper's normal colorssubmitOnFocusLost (default true) — set to false so only the explicit confirm/cancel buttons leave edit mode_isEditingManually set, so re-expanding showed an empty text field instead of the quantity. All collapse paths now exit edit mode.submitOnFocusLost: false, an outside tap did nothing and the stepper stayed stuck as a text field. It now commits or cancels depending on that flag.enableManualInput was on. The number is still tappable, but renders plain — the switch to the inline editor is the affordance. Callers that relied on the tinted background + bottom border should supply their own wrapper.Fixed assertion error when maxQuantity equals minQuantity (e.g., products limited to exactly 1 unit)
maxQuantity equals minQuantity (e.g., products limited to exactly 1 unit)
maxQuantity > minQuantity to maxQuantity >= minQuantity in both CartStepperController and _CartStepperCoremaxQuantity == minQuantity, automatically disabling the increment button when at maxFixed setState() called during build exception in StepperButton that occurred when GestureDetector disposed its gesture recognizers during a rebuild,
setState() called during build exception in StepperButton that occurred when GestureDetector disposed its gesture recognizers during a rebuild, triggering onLongPressCancel / onTapCancel synchronously inside the build phaseAdded Deep Dive: Throttle vs Debounce section explaining the two async execution strategies with flow diagrams and comparison table
isLoading and Async Modes section documenting external vs internal loading state interactions and the debounce gotchaSplit `CartStepper` into two widgets:
CartStepper into two widgets:
CartStepper<T> - Simple, ~20 parameters, synchronous only, supports generic num typesAsyncCartStepper<T> - Full-featured, ~35 parameters (organized into config objects), supports async operations, undo, streams, and moreCartStepperAsyncBehavior - async settings (optimistic updates, debounce, throttle)CartStepperLongPressConfig - long press behaviorCartStepperManualInputConfig - manual input settingsCartStepperCollapseConfig - auto-collapse behaviorCartStepperIconConfig - icon customizationseparateIcon renamed to collapsedBadgeIcon (via CartStepperIconConfig)QuantityFormatters now accept num instead of intThemedCartStepper is now generic (ThemedCartStepper<T extends num>)CartStepperThemeData uses config objects instead of flat parametersCartStepper<double>(quantity: 1.5, ...) for decimal quantitiesonDetailedQuantityChanged: (newQty, oldQty, type) {}textDirection: TextDirection.rtldirection: CartStepperDirection.verticalonExpanded / onCollapsedcontroller: myController for external state managementquantityStream: myStream for stream-based updatesasyncValidator: (current, next) async => ...expandedBuilder: (ctx, qty, inc, dec, loading) => ...animation: CartStepperAnimation(transitionBuilder: ...)undoConfig: CartStepperUndoConfig(...) for undo supportonTotalChanged: (total) {} for CartStepperGrouponQuantityChangedAsync: (index, qty) async {} for groupsCartStepperSelectionMode.singleCartStepperLongPressConfig.fast, CartStepperAsyncBehavior.optimistic, etc.MIGRATION.md)Initial release of Advance Cart Stepper.
Initial release of Advance Cart Stepper.
id for stable keysNothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →