oh_my_flutter 0.26.0
oh_my_flutter: ^0.26.0 copied to clipboard
Empower Flutter with utilities that make development 10x faster.
0.26.0 #
- Breaking: Replace
SkeletonStyle.radiuswithSkeletonStyle.shape. Rectangular bones accept any FlutterShapeBorder, including bounds-aware capsules. - Add
MorphNodeto configure a child widget's projection, transition, and paint order during a matching Morph flight. - Make country-aware phone-number fields respond faster during ordinary typing and deletion while retaining the same formatting.
- Add
PulseFadeMotionEffectfor a continuous breathing fade with configurable minimum opacity. - Let
Skeletonanimate between its loading shapes and content with an opt-in crossfade or a custom transition. - Breaking: Configure
SkeletonDescendantBehaviorwithpaintAsBone(),deferToChildren(), orhide()constructors instead of enum values.paintAsBone(builder: ...)draws a custom widget for one loading branch while retaining the original content and automatic bones elsewhere. - Add
RouteListenerfor reacting to route settlement without changing child visibility or layout. - Keep SnapList trailing content ready to scroll in after the final item without
a paint jump. Respect
clipBehaviorand apply only the supplied item transitions. - Breaking: SnapList transition builders receive
SnapListTransitionDetailsinstead of theisReverseboolean. Readdetails.isReversefor direction,details.isTrailingfor the trailing child, anddetails.involvesTrailingto customize effects on either side of a trailing reveal.
0.25.0 #
- Jump directly to any SnapList item without animation using
SnapListController.jumpTo(index). - Breaking: Configure descendant images with
MorphDescendantFlightBehavior.snapshot(changes: notifier)instead ofMorphDescendant.snapshotChanges. Flight behaviors now uselive(),snapshot(), andhide()constructors. - Add independent
MorphTarget.reverseDurationandreverseCurvetiming for local returns and route pops, including navigation that reverses before its Morph flight finishes. Direction changes retain their visible state while beginning the newly selected curve. - Breaking: Move
watchDestinationfromMorphtoMorphTarget. Enable it on the shared target when either endpoint can move while it is the current destination; watching now applies to that connection in both directions. - Breaking: Replace the unnamed
PhoneNumberconstructor withparseandtryParse, require explicit international input beginning with+, and addisValidfor checking current country numbering-plan prefixes.
0.24.0 #
-
Keep watched Morph destinations coherent when layout or inherited values change during a flight. Geometry, custom properties, grouped pixels, and descendant snapshots now refresh together before paint-confirmed handoff, while avoiding redundant group capture work and excess image overlap. Completed handoffs also retire retained overlay layers before releasing captured pixels, and nested flights remain until shared ancestor handoffs complete, preventing grouped content from flashing after route pops. Rapid route reversals now reclaim flight paint ownership before cancelling a pending endpoint handoff, so a settled destination cannot remain duplicated behind its returning flight.
-
Breaking: Morph appearances now share the same
MorphTargetinstance through orderedtargetsalternatives. Movedurationandcurveto the target; omitted values retain ancestor timing inheritance.canMatchchecks each proposed connection once; appearances can further restrict their alternatives withMorph.canMatch, and custom delegates can select visuals throughMorphEndpointContext.target. Observe navigation through the targetstatuslistenable instead ofMorphNavigatorObserver.tagStatus. RemoveMorphSiblingandanimateChildChanges; use delegate-managed group snapshots for accompanying content and Flutter's animation widgets for local child changes. Unrelated routes stay visible behind transparent destinations. -
Add
DeviceLocale.getCountry()andDevice.localeto read the configured country on Android, iOS, macOS, and Windows, returning null when unavailable. -
Add
DeviceSim.getCountry()andDevice.simto read Android’s default SIM provider country asCountry, returning null when unavailable. -
Add
InteractiveSwipeDismiss.canStartDragto block body and handle drags before movement while keeping descendant interactions available. -
Use updated phone metadata for parsing and display formatting.
-
Add
PhoneNumberTextInputFormatterfor immutable country-aware national formatting, explicit international-value and country results, international pastes, as-you-type grouping, and supported length limits while editing phone-number fields.
0.23.0 #
-
Breaking: Rename
MorphEndpointContext.registerDescendantWidgettodescendantWidgetandregisterGroupSnapshottogroupSnapshot. -
Add
Group,GroupLink, and disposableGroupSnapshotfor measuring and capturing separately placed widgets together. Custom Morph flights can usegroupSnapshotto carry the group while preserving nested Morphs and capturing its resolved layout before the flight begins. -
Add independent
SnapList.incomingTransitionBuilderandoutgoingTransitionBuildereffects through scroll-drivenAnimation<double>values for Flutter transition widgets, with backward navigation context and reduced-motion support. Active item motion resolves to its destination before the list becomes inactive. -
Breaking: Remove
SnapList.viewportFraction. Remove this argument from constructor calls; items now fill the padded viewport along the scroll axis. -
Preserve
SnapListchildren with global keys without duplicate-key errors. -
Reduce crowding between
Skeletontext placeholders with baseline-aligned bars while preserving text layout and widths. -
Accept complete international phone identifiers with possible country-specific lengths even when their prefixes are not allocated by a carrier, including service-managed WhatsApp test recipients.
0.22.0 #
-
Add
SnapListwith horizontal and vertical snapping, eager and lazy children, configurable item sizing and motion, adjacent navigation, automatic nested scrolling handoff, and measured trailing content. -
Add
InteractiveSwipeDismiss.onPositionChangedto follow every change to the child's actual offset and directional fraction of its size during dragging and return motion. -
Inspect shared-element navigation through
MorphNavigatorObserver.maybeOfNavigatorandtagStatus. Read or listen for pending, unmatched, flying, completed, and cancelled results to choose a normal route transition when a shared flight is unavailable. UseMorphScope(enabled: false)to prevent new flights in a subtree while preserving ongoing transitions. -
Keep swipe dismissal tied to the gesture's initial direction. Sideways and opposite starts report their entire drag as overdrag and cannot turn into a dismissal until the finger lifts and starts again.
-
Add optional
InteractiveSwipeDismiss.onOverdragto report raw movement outside the dismissal direction, including diagonal pulls and scroll-edge handoff. Consumers own the visual response; free drag bypasses notifications. -
Breaking: Rename
InteractiveSwipeDismissDragConfig.dismissThresholdtodismissFraction. Dismissal distance now uses the wrapped child's size, captured at gesture start, instead of the screen size. -
Configure swipe dismissal return motion with
returnCurveandreturnDurationinInteractiveSwipeDismissDragConfig. Existing defaults remain linear over 260 ms. -
Breaking: Custom Morph delegates now receive
MorphFlightProgressinlerpPropertiesinstead of a numeric progress argument. Useprogress.curvedProgressto preserve existing interpolation, orprogress.uncurvedProgressfor independent content timing. The context also exposesflightKindandanimationStatus, and keeps interrupted flights consistent with their visible content. Direct calls andMorphChildFlightDelegate.lerpalso require the new context.
0.21.0 #
- Breaking: Morph now uses stable
MorphTargetinstances and aMorphNavigatorObserveron each owning Navigator. Replacetagon Morph and MorphSibling withtarget; use separate targets with equal tags for each appearance and share the exact target with its siblings. Mounting and removal automatically transfer the shared visual, including returns and interrupted transitions. Sibling progress follows its appearance in both directions and stays visible during child-only replacement. Child updates are now immediate by default; setanimateChildChanges: trueto enable in-place child-replacement flights. Move flight configuration toflightConfig: MorphFlightConfig.auto(...)or.custom(delegate); usechildSwitchAtandchildTransitionfor automatic content changes. Custom flights exposecurvedAnimationanduncurvedAnimation; rename delegatelerptolerpProperties, register endpoint content withendpoint.descendantWidget(...), and build the returned widget. Snapshot content remains available during keyed endpoint replacement, including in custom crossfades. Independently timed returns stay visually settled above a closing modal barrier until it disappears, avoiding a brief color flash at landing. Sibling builders receive child, curved, and uncurved animations. RenameMorphSibling.paintAboveMorphtopaintOnTop. - Add
SafeAreaObserverandSafeAreaObserverHandleto measure local unsafe edge overlap and observe changes without moving or padding content.
0.20.0 #
- Add
MaybeSafeAreaHandleto read corrected bounds and observe changes, including adjustments caused by moving ancestors. - Breaking: Make an explicit or inherited
Morph.durationcontrol route flights, allowing shared visuals to finish before or after page transitions while fully omitted route durations continue following the route animation. - Add
Countryfor country and territory identifiers, including established ISO extensions, primary calling codes, strict or nullable lookups, and offline localized display names with broad locale support. - Keep
MaybeSafeAreacontent correctly positioned and clipped in offscreen snapshots, including Morph transitions.
0.19.0 #
- Breaking: Replace
Telephonywith a validatedPhoneNumbervalue that provides display and canonical E.164 forms and calls its constructor number. - Breaking: Reshape
Whatsappinto a validated recipient value that owns a phone number or username, formats it for display, and opens chats throughchatinstead oflaunchChat. - Add
StringExtension.isDigitsOnlyfor identifying non-empty strings that contain only ASCII digits. - Breaking: Remove the
estimateoption fromDeviceDisplay.cornerRadii(). Display corners now come only from Flutter, Android platform information, or public iOS 26 UIKit information and return null when trustworthy values are unavailable. - Add
DoubleExtension.isPositiveFinitefor identifying finitedoublevalues that are strictly greater than zero.
0.18.0 #
- Add
NativeSelectableTextfor selectable plain or styled Flutter text with native selection menus on Android, iOS, macOS, Windows, and Linux, plus an adaptive Flutter fallback when native presentation is unavailable.
0.17.0 #
- Add
ScaleOutMotionEffectfor scaling widgets and text from their normal size to a configurable final scale with standard Motion timing, playback, and lifecycle controls.
0.16.0 #
- Add
InteractiveSwipeDismissfor translating any live content with a configurable, scroll-aware directional dismissal gesture, callback-owned removal, and presentation-neutral drag-handle regions. - Breaking: Replace
MorphForegroundwith taggedMorphSiblingcontrols that coordinate widgets outside a Morph subtree through matching visual progress, rebuild-stable custom transitions, and configurable above-Morph paint ordering. - Keep watched Morph destination snapshots aligned with geometry and content changes during active forward and reverse flights while reusing unchanged images whenever changes are directly observable.
- Keep retained Morph text and Column layout aligned with the paragraph's actual wrapping when a flight reverses before settling.
- Prevent translucent Morph content from darkening while completed flights hand off to their live endpoints.
- Add
Devicefor grouping device features andDeviceDisplayfor reading exact display corner radii with an optional approximate phone fallback.
0.15.0 #
- Add device-formatted current addresses with selectable nullable components,
retained coordinates, an optional best-effort locale, and a bounded
reverse-geocoding wait, while keeping
DeviceLocationimplementable for consumer test doubles.
0.14.0 #
- Breaking: Make
Skeletonrepresent the first visibly painted descendant on each branch as one bone, and add nestedSkeletonDescendantbehaviors for painting a branch root, deferring to its children, or hiding it while retaining layout.
0.13.0 #
- Breaking: Rename
ControlledVisibilityControllertoVisibilityController. - Add a generic callable
Debouncer<T>for delaying repeated synchronous or asynchronous callbacks, sharing the latest pending result, discarding superseded running results by default, and explicitly cancelling or disposing active results.
0.12.0 #
- Add
Skeletonfor turning existing widget layouts into neutral loading placeholders with optional fade and shimmer effects, configurable rectangular radius and effect timing, and a localized live loading-status label. - Keep multiline
Morphtext fully visible and followingColumncontent correctly positioned and spaced while typography grows or shrinks, with children corresponding by position regardless of their Flutter keys. - Prevent shrinking reverse
Morphtransitions from leaving duplicated text from earlier frames.
0.11.1 #
- Add
DeviceLocationfor managing foreground permission and settings and retrieving fresh Android or iOS coordinates. This release requires Flutter 3.47 and Dart 3.13.
0.11.0 #
- This version was tagged but not published.
0.10.0 #
- Preserve visual continuity when
Morphtransitions overlap or hand their completed flight to a live endpoint, including route reversals and retargets. - Add configurable live or preserved
MaybeSafeAreapositioning so controls can either track unsafe edges while moving or retain their initial correction within a moving surface.
0.9.0 #
- Add
MorphForegroundfor keeping live controls and other content visible above nearby Morph transitions without joining their animation.
0.8.2 #
- Keep
RouteSettledcontent hidden while another route covers it, then replay its configured show behavior after that route fully leaves.
0.8.1 #
- Make the repository's consumer guides easier to discover from the README, alongside the generated API reference and runnable example.
0.8.0 #
- Add
MaybeSafeAreato keep a child's layout bounds out of enabled unsafe view edges as it moves or scrolls, without changing layout or delaying its first rendered frame.
0.7.1 #
- Fix nested Morphs without a matching endpoint in the current transition so they remain visible as ordinary content inside their ancestor's flight.
0.7.0 #
- Breaking: Extend automatic Morph transitions with
MorphDescendantconfiguration for how selected subtrees participate in their nearest Morph, including live, snapshotted, or hidden flight behavior; optional transitions for discrete content switches; destination tracking configured by the departing Morph; and specialized transitions through eligibleMotionwrappers. RenameMorph.watchtowatchDestinationandnonMorphDescendantsTransitiontoswitchTransition.
0.6.1 #
- Add
Morphshared-element transitions for any widget across routes or within the same screen. EligibleText,Container,DecoratedBox, and verticalColumnpairs receive specialized transitions automatically, while other pairs use the generic content switch. Nested Morphs inherit an omitted duration or curve from their nearest Morph ancestor. Custom typed flight delegates remain available when needed. - Reorganize package documentation into focused consumer guides for widgets, extensions, networking, and utilities, with a compact README catalog that links to each documentation section.
- Add configurable
MotionStartupbehavior andMotionControllerplayback forMotionandTextMotion, including automatic playback, a held starting state, or a skipped ending state with controller-driven playback on demand. - Add
ShakeMotionEffectfor damped horizontal, vertical, or diagonal shakes with configurable strength, excursion count, timing, and playback. - Add
MotionEffectBoundsfor declaring translation and scale ranges for custom effects with oscillating, abrupt, or short-lived visual extremes.
0.5.0 #
- Breaking: Replace
MotionEffect.buildTransitionwithMotionEffect.apply. Custom effects now useMotionEffectTransformto compose opacity, translation, and uniform scale. The same custom effect can be used by bothMotionandTextMotion. - Add
TextMotionandTextMotion.listfor applying existing motion effects to the visible Unicode graphemes in plain Flutter text, with configurable staggering and effect lifecycle callbacks for the complete text. - Add
Marqueefor continuously moving an ordered widget strip in any physical direction, with bounded or explicit viewport sizing, configurable loop duration and spacing, continuous repetition throughinfinity, reduced-motion handling, and opt-in interaction.
0.4.1 #
- Add effect-level
onStartandonEndlifecycle callbacks toMotionEffect, withonStarton every built-in effect andonEndon one-shot effects. - Keep
Motioninteraction disabled during effect delays wheninteractiveis false. - Add
MotionPlayback.isOncefor semantic playback branching.
0.4.0 #
- Add extensible single- and multi-effect
Motioncomposition with one-shot and looping playback, including independent per-effect startup delays, the built-inFadeInMotionEffect,ScaleInMotionEffect, paint-onlyMoveMotionEffectandFloatingMotionEffect, reduced-motion handling, a shared frame scheduler, optional interaction blocking during playback and render-layer transforms. - Add
PauseAnimationsfor muting subtree ticker callbacks either explicitly or for a fixed duration. - Add controller-driven
Sequencefor displaying ordered widgets one at a time, with indexed navigation, optional directional transitions, and configurable child-state retention. Its lazy entry lifecycle limits mounted and animated work to participating children by default, while configurable alignment anchors differently sized transition participants.
0.3.2 #
- Remove the root package lockfile from version control.
0.3.1 #
- Align the package's explicit formatter settings with
panaso local and publication analysis both pass at the configured 120-column width.
0.3.0 #
- Add controller-driven
ControlledVisibilitywith independent caller-owned show and hide transitions, configurable timing, reduced-motion handling, and mounted or unmounted hidden-state behavior. - Add
RouteSettledfor showing route content only after navigation motion and user gestures finish, with optional direction-specific transitions. - Improve pubspec description.
0.2.0 #
- Breaking: Remove
StringExtension.hexToColor(). Use FlutterColorconstructors or an application-owned parser for string input. - Improve the README, example, and public API documentation.
- Add trusted pub.dev publishing through GitHub Actions.
- Use the canonical Ventairy repository links in package metadata.
0.1.0 #
- Initial public release.
- Add deterministic relative-time formatting with configurable fallback behavior.
- Add color, OKLCH, string, object, and gesture velocity extensions.
- Add offline Dio interception and a typed offline connection exception.
- Add portable telephony and WhatsApp URI helpers.