anchor_kit 0.2.1
anchor_kit: ^0.2.1 copied to clipboard
Headless anchor-positioning primitives for popovers, tooltips, dropdowns and menus. A Floating UI for Flutter.
0.2.1 #
Documentation hygiene — no behaviour changes.
doc/API.mdcaught up with 0.2.0.AutoPlacement,SizeMiddlewareandHideshipped in 0.2.0 and were documented in the README, but the API reference still stopped atArrow— all three now have entries with their constructor arguments and themiddlewareDatakeys they write. ThePlacementsection also namesPlacementSide/PlacementAlign, which had never been mentioned by name despite being how you read a resolved placement (position.placement.side).Offset4is documented as deprecated, with the replacement spelled out. Its deprecation message said it would be removed inv0.1.0— a version that had already shipped — and now names0.3.0.- The README no longer carries version numbers. The status line restated the
release and Install pinned
^0.2.0; both had to be edited every release and are exactly what went stale in sibling packages.pubspec.yamlis the version,CHANGELOG.mdis the history, the pub.flutter-io.cn badge renders the current number. Install is nowflutter pub add anchor_kit. - New:
test/docs_freshness_test.dart— fails the suite if the README contains a version literal, ifCHANGELOG.md's newest entry doesn't matchpubspec.yaml, or if a public type has no entry indoc/API.md(this is the guard that found the three undocumented middleware). - New:
test/readme_snippets_test.dart— compile-checks every Dart snippet in the README anddoc/API.mdagainst the real API, including each documented middleware constructor and the "write your own middleware" example.
0.2.0 #
Stable release of the 0.2.0 line (the 0.2.0-dev.* notes below are the full
history). Headline changes since 0.1.x:
- New middleware:
SizeMiddleware(available-space reporting for capped, scrollable menus),AutoPlacement(pick the side with the most room), andHide(flag when the anchor scrolls off-screen).Shiftgained main-axis / cross-axis / RTL controls. - Fix (
FloatingOverlay): overlay mutations are deferred out of the build/layout phase, so opening/updating an overlay under aLayoutBuilder(or rebuilt per-frame) no longer throwssetState() called during buildon Flutter 3.35+. - Fix (
AutoPlacement): preserves an earlierOffsetMiddlewaregap across a re-place, and only keeps the current side when it is an allowed candidate. - Example: a new Stress test recipe — an in-app performance harness with
a live FPS / build / raster / jank readout and a
computePositionmicro-benchmark. - Docs: README gained a measured Performance section; install/status
point at
^0.2.0.
All public API additions are backward compatible with 0.1.x.
0.2.0-dev.3 #
- Fix (
FloatingOverlay): opening/updating an overlay no longer throwssetState() called during build. When aFloatingOverlayis rebuilt during a layout pass — e.g. nested under aLayoutBuilder, or rebuilt every frame — itsdidUpdateWidgetused to insert/remove/rebuild theOverlayentry synchronously, marking the already-builtOverlaydirty mid-build. Overlay mutations triggered during build/layout are now deferred to just after the frame. Surfaced on Flutter 3.35+ whereOverlayis stricter.
0.2.0-dev.2 #
- Fix (
AutoPlacement): an earlierOffsetMiddlewaregap is now preserved whenAutoPlacementresolves to a different side — the offset is re-projected onto the chosen side's axes instead of snapping the element back to the bare base position (it used to touch the anchor after a re-place). - Fix (
AutoPlacement): the "keep the current placement if it fits" fast-path no longer retains a side that the caller excluded fromcandidates; the current placement is kept only when it is actually a candidate. - Docs:
READMEinstall/status now point at^0.2.0.
0.2.0-dev.1 #
Prerelease of 0.2.0 — opt in with anchor_kit: 0.2.0-dev.1. Stable users stay
on 0.1.x until 0.2.0 ships.
- New middleware:
SizeMiddleware— reports available space on the resolved side (data['size'] = {availableWidth, availableHeight}) so a long menu can cap its height to the viewport and scroll. New "Size" example recipe.AutoPlacement— picks the side with the most room (keeps the current side if it fits, else least overflow); use instead ofFlip.Hide— flagsdata['hide'] = {referenceHidden}when the anchor scrolls off-screen.
Shiftnow clamps only the main axis by default (was both axes), so it no longer detaches the floating element from its anchor. Opt intocrossAxis: true;rtl: truekeeps the right edge for oversized elements.- Note:
SizeMiddlewarecollides withdart:ui'sSize, hence theMiddlewaresuffix.
0.1.1 #
- Docs: denser, mobile-sized screenshots (430×820) so the README images read clearly instead of tall, mostly-empty frames. No code changes.
0.1.0 #
- New:
FloatingOverlaygainsbarrierDismissible+onDismiss— a transparent tap-outside-to-close barrier for dropdowns / selects / popovers. - Example: rebuilt into a recipe gallery — placement playground, tooltip,
dropdown, select (flips up), and a popover-with-arrow card. Deep-linkable via
?demo=<id>on web. Now runs on web too. - Docs: README overhauled with screenshots, concept explanations (offset/flip/shift/arrow) and a "Known limitations" section.
- Bundles all
0.0.2fixes below.
0.0.2 #
- Fix:
FloatingOverlaynow follows the anchor when an ancestor scrolls (previously it only listened to descendant scrolls and silently failed to reposition). It also repositions on window resize/rotation and re-measures the floating child each frame so size changes stay positioned. - Fix:
Flipno longer spuriously flips a placement that already fits but touches a viewport edge; and when neither side fits it keeps the side that overflows least instead of always the original. - Fix:
Shiftkeeps the start edge visible when the floating element is larger than the viewport (was pinned to the far edge). - Fix:
Arrowno longer throws when the floating element is too small to honour padding — it centres the arrow instead. - API:
Offset4renamed toOffsetMiddleware(old name kept as a deprecated alias until v0.1.0). - Lifecycle:
mountedguards on overlay open/measurement. - Docs: added
docs/SPEC.md; addedFloatingOverlaywidget tests (including scroll-follow) and middleware edge-case tests.
0.0.1 #
- Initial scaffold:
computePosition,Placement, middleware (Offset4,Flip,Shift,Arrow),FloatingOverlaywidget.