liqkit_ui 0.4.0
liqkit_ui: ^0.4.0 copied to clipboard
iOS 26 Liquid Glass design system for Flutter - components, theming, and foundation primitives. Hand-ported from the Figma-extracted liqkit design system.
Changelog #
0.4.0 #
Cupertino-free, native-feeling iOS 26 — the visible chrome of every
component is now driven by liqkit_ui primitives only, with no
package:flutter/cupertino.dart imports anywhere in lib/ or test/.
Highlights #
- No more Cupertino visible widgets. Pickers, wheels, text fields,
pull-down menus, and route transitions are all reimplemented on
flutter/widgets+ liqkit_ui glass — none of the iOS-13-era Cupertino chrome remains. - Native iOS edge-swipe-to-pop on
LiqPageRoute. Constants and curves match_CupertinoPageTransitionStateexactly (_kLiqPushDuration=500ms,_kLiqDroppedSwipeDuration=350ms,fastEaseInToSlowEaseOut/linearToEaseOut/easeInToLinear), with RTL-aware push direction and gesture-drivenlinearTransitionflag. - Glass surfaces paint glass on frame one. Added
LiqGlassSurface.precacheShader()to warm the static fragment-program cache at app startup; when warm, new mounts bind the shader synchronously ininitStateinstead ofsetState-ing into it after an async load. Eliminates the "flat then glass" pop on first paint. LiqMenuroute no longer fades.BackdropFiltercannot sample the real backdrop through an opacity layer (the parent'ssaveLayerhides it), so the popup menu used to render flat for the entire fade-in. DroppedFadeTransitionand rely onScaleTransitiononly (0.92 → 1.0, easeOutCubic open / easeInCubic close), matching native iOSUIMenubehaviour. Push 220ms / pop 150ms; alignment flips tobottomCenterwhen the menu opens upward.LiqBottomNavBarno longer double-counts safe area. Removed the manualMediaQuery.padding.bottomadd that stacked on top of the outerSafeArea, which had been leaving ~93pt of empty space below the floating pill on notched devices. Tightened_outerPaddingto(16, 8, 16, 8)to match the native iOS 26 floating tab-bar gap.LiqFloatingActionButtonicon centering fix. Wrapped the inner glyph inCenter(...); previously it inheritedEdgeInsets.zerofromLiqGlassSurfaceand rendered top-left.- Readability tune-up. Bumped secondary / tertiary / quaternary
label opacities by ~10pp so neutral-on-glass text holds contrast at
every elevation. Three raw
const TextStyle(...)spots inliq_picker_extras.dart(LiqListRow.trailing) gained explicitsecondaryLabelcolors so wrappingLiqListRow.trailingdoesn't inherit white-on-white.
Drops #
- All Cupertino-era widget references retired from internal code paths.
cupertino_iconsfont: zero remaining references; bundle no longer pulls in theCupertinoIconsfont even for fallback glyphs.
0.3.0 #
Final batch of primitives so consumers can build a full iOS 26 app
without ever importing package:flutter/material.dart — and the
library itself no longer imports it either.
Internal: package is now Material-free #
Replaced every internal Icons.X literal in liqkit_ui with the
matching LucideIcons.X glyph from lucide_icons_flutter (added
as a direct dep). Affects 11 files: liq_calendar, liq_chip,
liq_collapsible, liq_combobox, liq_command_palette,
liq_date_picker_field, liq_number_field, liq_pagination,
liq_rich_editor, liq_toast, liq_tree_view. Pure visual swap;
no API change. Glyphs map closely (Material chevron_right →
Lucide chevronRight, check_circle_outline → circleCheck,
format_bold → bold, etc.).
Net effect: a consumer who imports only package:liqkit_ui and
package:liqkit_ui_icons no longer transitively pulls Material
into their bundle (the ~1.6 MB MaterialIcons-Regular.otf font is
no longer referenced and is fully tree-shaken away — previously
8.8 KB still leaked through). The new LiqTimerPickerMode
typedef in liq_picker_extras.dart lets callers pass timer modes
without a package:flutter/cupertino.dart import either.
New components #
LiqSliverAppBar+LiqFlexibleSpaceBar— iOS 26 collapsing app-bar pattern (hero image expanded, glass title bar pinned). Drop-in replacement for Material'sSliverAppBar/FlexibleSpaceBarfor anyCustomScrollViewflow that wants the hero-collapse UX. Built onSliverPersistentHeader(purepackage:flutter/widgets.dart, no Material dependency).LiqDatePickerModal.show()— modal date-picker route. Drop-in replacement for Material'sshowDatePicker. Returns aFuture<DateTime?>that resolves to the chosen date or null on dismiss. Internally usesLiqCalendarinside aLiqAlertwith Cancel + Done actions.LiqForm+LiqValidatedField<T>— form-state container withvalidate()/reset()/save()propagation to allLiqValidatedFielddescendants. Drop-in replacement for Material'sForm+TextFormFieldfor the typical "submit button calls_formKey.currentState?.validate()" pattern. NoFormdependency in consumer code.
The remaining Material symbols an iOS-26 app might still touch
are limited to BorderSide (already exported by
package:flutter/painting.dart → package:flutter/widgets.dart,
so no Material import is actually needed) and
GlobalMaterialLocalizations (only when the app needs Material's
i18n delegates — replace with GlobalCupertinoLocalizations for
iOS-only apps).
0.2.0 #
Adds the missing primitives the showcase needed so an iOS 26 app can
build entirely against package:liqkit_ui + package:liqkit_ui_icons,
with no package:flutter/material.dart import in consumer code.
New foundation #
LiqColors— Material-style color palette mapped to iOS 26 system tones. Drop-in replacement forColors.X(white/black/transparent greyscale + the named iOS system tones + agreyRamp.shade(N)accessor). Lives inpackage:liqkit_ui(foundation export).
New components #
LiqDismissible— swipe-to-dismiss row, alias forDismissiblefrompackage:flutter/widgets.dart(no Material dependency).LiqPageRoute— iOS-style push route (subclass ofCupertinoPageRoute). Drop-in replacement forMaterialPageRoute.LiqReorderableList— drag-to-reorder vertical list backed bySliverReorderableList. ReplacesReorderableListView.LiqRefreshIndicator— pull-to-refresh wrapper rendering aLiqSpinnerinstead of Material's circular progress glyph.
Companion package #
liqkit_ui_icons0.2.0 addsLiqMaterialIcons— 315 verbose-name aliases (LiqMaterialIcons.accountCircle,errorOutline, …) for drop-in migration offIcons.X. The curated short-name surface onLiqIconsis unchanged.
0.1.0 #
First real release. Comprehensive iOS 26 Liquid Glass design system.
Flagship — real-refraction liquid glass shader #
- New
liq_liquid_glass.fragfragment shader. Per-pixel pipeline: signed-distance rounded-rect → height-field (edge bulge) → analytic surface normal → Snell refraction → 17-tap rosette frosted blur → adaptive vibrancy tint → Schlick Fresnel rim → optional Blinn-Phong specular and chromatic dispersion. Premultiplied alpha output. - New widget
LiqLiquidGlass— opt-in premium glass surface using the shader viaBackdropFilter(filter: ImageFilter.shader(...))on Impeller. Falls back gracefully toBackdropFilter(blur)+ tint overlay on Flutter web (CanvasKit doesn't yet supportImageFilter.shader). LiqGlassSurface(the foundation primitive everyLiq*component uses) now delegates internally to the new shader on Impeller. Every existing component —LiqCard,LiqAppBar,LiqSheet,LiqMenu,LiqDialog,LiqPopover,LiqDrawer,LiqTooltip,LiqNotification— automatically inherits real refraction with no call-site changes.
LiqScaffold safe-area fix #
- Body content now respects the top safe-area inset whether or not an app bar is provided.
New components (24+ added across this release cycle) #
- Steppers:
LiqVerticalStepper,LiqHorizontalStepper,LiqOnboardingStepper,LiqProgressStepper,LiqNumericStepper,LiqStepdata class. - Menu:
LiqMenuBar+LiqMenuBarItem(macOS-style top strip). - Activity:
LiqShareSheet+LiqShareActivity,LiqActivityIndicatorView. - Auth:
LiqFaceIdView,LiqTouchIdSensor. NewLiqFaceIdState.idle. - Bezels:
LiqDeviceShowcase+LiqDeviceType(12 device presets) +LiqDeviceSpec. - Pickers:
LiqPickerButton,LiqNumberPicker,LiqMeasurementPicker,LiqDateRangePicker,LiqTimerPicker,LiqMultiColumnPicker. - System:
LiqSystemAlert,LiqSystemOverlay,LiqControlCenter,LiqControlCenterTile,LiqQuickActionsRow,LiqIconBarfamily. - Keyboard:
LiqLayoutKeyboardwith 7 layouts (alphabetic, numeric, decimal, phone, email, url, emoji),LiqKeyboardSuggestionBar. - Animations:
LiqFlowAnimation,LiqMorphTransition,LiqRipple,LiqBounce,LiqPulse,LiqShimmer,LiqSwipeDetector,LiqPinchDetector,LiqLongPress. - macOS chrome:
LiqWindow,LiqWindowToolbar,LiqWindowControls,LiqWindowGlassButton.
Component extensions #
LiqAlert.showMessage/showError/showConfirmationstatic helpers; newcontentslot for embedding arbitrary widgets;LiqAlertAction.iconparam.- New
LiqTextInputDialog(alert + LiqTextField + validator). LiqMaterialChip— 10 newLiqMaterialStylevalues + newLiqMaterialConfigfor custom blur/opacity/tint/saturation/vibrancy.LiqEmptyState— new typed presets (noData,error,noConnection,noResults),LiqCompactEmptyState,LiqIllustratedEmptyState,LiqLoadingState.
Foundation #
LiqAppleColors— full UI palette (uiBackground, uiCyanLight, uiPurple, etc.);LiqApplePalettebrightness-bound view.LiqAppleTextStyles— secondary/tertiary/quaternary modifiers.LiqAppleColorsContext/LiqAppleTypographyContextextensions onBuildContext(context.appleColors.X,context.textStyles.body).LiqColorUtils— fromHex/toHex/lighten/darken/contrastingColor/mix.
Tests #
603 / 603 widget + foundation tests pass.
0.0.1 #
- Placeholder publish to reserve the name on pub.dev.