PackageTrack
Sign in Get early access

bc_ui

A Flutter design system porting heroui-native 1:1 — 60+ token-driven components, light and dark, on a Material 3 base.

0.4.2 binary-castle/bc-ui-flutter

What this package is like to depend on

Last release 8 days ago

15 Aug 2026

Too new to tell

only 2 release windows

Nearly every release is documented

notes for 7 of 7 stable releases

Nothing withdrawn

no release was ever pulled

0 months old

7 releases · first in 2026

7 releases in the last 12 months

see the full history below

Release timeline

7 releases · Jul 2026 to Aug 2026
Release Pre-release

Releases

latest 7
  1. 0.4.2 15 Aug 2026
    Release notes

    Dialog

    • A modal with a form in it no longer disappears behind the on-screen keyboard. The dialog is laid out in the band above the keyboard, and content taller than that band scrolls — focusing a field brings it into view instead of leaving the caret under the keys, so six fields in a modal stay reachable from the first to the last.
    • BCDialog.show gains isSwipeable (on by default): a downward drag carries the dialog with the finger the way a bottom sheet does, rubber-bands when dragged the other way, and either springs back or keeps the momentum of the throw — the drag physics BCToast already used, rather than a gesture that merely triggers the close animation. While the content is tall enough to scroll, the scroll takes the drag.
    • The Dialog showcase gains a Form dialog variant — six fields and a password, the case both of the above are about.
    Open source →
  2. 0.4.1 08 Aug 2026
    Release notes

    BCPasswordInput wraps BCInput but only ever exposed its trailing slot
    (the visibility toggle), so callers had no way to add a leading icon the
    way BCInput and BCTextFieldInput already allow. Forward a prefix
    through to the underlying input, leaving the toggle in the suffix slot,
    and show a lock-icon variant in the Input showcase.

    Co-authored-by: Claude Opus 4.8 [email protected]

    Open source →
    Release notes

    Password field

    • BCPasswordInput gains a prefix, the leading slot BCInput and BCTextFieldInput already exposed. The visibility toggle keeps the trailing slot, so a password field can now carry a leading icon (a lock, say) like every other input.
    Open source →
  3. 0.4.0 05 Aug 2026
    Release notes

    Phone field

    • BCPhoneField — an international phone input. The field's prefix is a tappable flag and dial code that opens the searchable country list, and the number groups itself as you type.
    • Leave initialCountry null and the field opens on the device's own region, the way a web form reads navigator.language — a phone set to Bangladesh opens on Bangladesh. fallbackCountry covers a device that reports no usable region (a bare en locale, or a UN M.49 region like es_419), and BCPhoneField.deviceCountry() exposes the lookup for your own state. This is the phone's configured region, not where it physically is.
    • Validation is libPhoneNumber's metadata rather than a regex, so it knows each country's real lengths and prefixes: +1 555 000 0000 is rejected where a digit count would pass it. onChanged hands back a BCPhoneNumber with e164, national, international, isoCode and isValid on every keystroke; onValidityChanged fires only when validity flips, so a submit button can be driven straight from it.
    • Nothing is blocked while you type — a half-typed number is not an error, so the message waits for blur (or for a caller-supplied errorText, which always wins). invalidNumberText: null keeps the field silent and reports through the callback only.
    • The country's trunk prefix is dropped as you type, because it is not part of an international number: a UK number beside +44 is 7400 123456, never 07400 123456.
    • The picker is authoritative about the country. +1 covers 25 countries and no parser can tell a US number from a Canadian one, so whatever the user picks wins over what the metadata guesses.
    • This adds bc_ui's first runtime dependency, phone_numbers_parser. It is pure Dart with no platform channels, and its own only dependency is meta.

    Select

    • triggerBuilder replaces a BCSelect's trigger wholesale while keeping its press feedback, tap handling, disabled dimming and popover anchoring.
    • matchTriggerWidth (default true, unchanged behaviour) stops a narrow custom trigger from squeezing the popover list to its own width.
    • triggerFeedback (default BCPressFeedback.scale, unchanged behaviour) because the scale is width-compensated and pops harder on a small inline trigger than on the default one.

    Input

    • autofillHints on BCInput, forwarded to the underlying field. Without it the OS keychain and iOS's one-tap SMS code were unreachable.
    Open source →
  4. 0.2.0 03 Aug 2026
    Release notes

    App header

    • filledIconButtons on BCAppHeader and BCSliverAppHeader renders every BCHeaderIconButton in the leading and actions slots filled, so a screen picks the style once instead of at each button. It reaches the back button the header implies, which no call site could style before.
    • Breaking: BCHeaderIconButton.filled is now bool? and defaults to null, which defers to the enclosing header (and to false where there is none). Passing filled: true or filled: false is unchanged and still wins over the header; only code that reads the field needs a null check.
    • The header's inherited style is now installed unconditionally. It used to be skipped unless foregroundColor was set, so a header that only wanted the default colours had no channel to its buttons at all.
    Open source →
  5. 0.1.0 30 Jul 2026
    Release notes

    Select

    • Three presentations: the anchored popover it always had, a bottomSheet with room for a long list, and a wheel for short ordered ones, committed with Done. Set with presentation.
    • Search. isSearchable filters on label and description; onSearch replaces that with your own lookup — debounced by searchDebounce, awaited with a spinner, and rendered exactly as returned, so it can hit the network.
    • Pagination. onLoadMore fires as the list nears its end, once per page; isLoadingMore shows a spinner under the last row.
    • Rows take leading and trailing widgets, a per-item onTap that runs alongside the value change, and isDisabled. itemBuilder hands the whole row over, selection state included.
    • emptyPlaceholder and maxListHeight for the rest.

    The version jumps to 0.1.0 so ^0.1.0 resolves the way callers expect; ^0.0.x had pinned them to a single patch.

    Agent skill

    • skills/bc-ui/ teaches an AI agent to use the library — setup, the naming conventions, a routing table to per-category references, and the traps that fail silently. Install with npx skills add binary-castle/bc-ui-flutter, or copy it into .claude/skills/; it ships in the package either way.
    • Its references come out of tool/gen_api_doc.py, the same script that writes doc/api.md, so they cannot drift. --check fails when either is stale and --check-coverage lists public symbols nothing documents.

    Fixes

    • The generated prop tables dropped every named parameter of a constructor that led with a positional one, so BCText was documented as taking only data, and BCLabel, BCDescription, BCFieldError and BCTextFieldLabel were each missing their flags. BCTextFieldError's argument was listed as text when it is message. All now generated correctly, along with the previously undocumented BCTextWeight, BCInputOTPSlot*, BCSkeleton*Animation, BCNavDrawerItem and BCAnchoredOverlayController.
    • The README's License section still said the license was a placeholder, left over from before the package was licensed. It now states Apache-2.0 and credits heroui-native. pub.dev's own metadata was already correct.
    Open source →
  6. 0.0.2 29 Jul 2026
    Release notes
    • Fixed the README on pub.dev: images and repository links are absolute now. pub.dev strips raw <img> tags and drops repo-relative links, so the banner, the light/dark screenshots and every entry in the component table rendered without them.
    • Install instructions now point at the published package rather than a local path dependency.
    Open source →
  7. 0.0.1 29 Jul 2026
    Release notes

    First release — a Flutter port of heroui-native, covering 50+ components on a Material 3 base.

    Foundation

    • BCTheme.light() / BCTheme.dark() return a ThemeData, so Material widgets keep working alongside bc_ui.
    • 64 semantic colour tokens in BCThemeExtension, precomputed from heroui-native's oklch sources including every color-mix derived hover and soft shade. BCThemeOverrides recomputes the accent-derived tokens from a single colour.
    • Continuous (squircle) corners via RoundedSuperellipseBorder, layered surface and overlay shadows, and the ported motion constants in BCMotion.
    • Inter is bundled; no font setup.

    Components

    • Navigation — BCAppHeader, BCSliverAppHeader, BCBottomNav, BCNavRail, BCNavDrawer, BCToolbar, BCTabs with a swipeable BCTabView.
    • Actions — BCButton, BCSocialAuthButton (10 providers, vector brand marks, no assets), BCLinkButton, BCCloseButton, BCFab, BCSpeedDial, BCToggleButton, and the BCPressable feedback engine.
    • Containers and data display — BCSurface, BCCard, BCListGroup, BCFlipCard, BCScrollShadow, BCAvatar, BCChip, BCRibbon, BCTagGroup, BCSkeleton, BCSpinner, BCProgress, BCLoadingOverlay, BCRating, BCEmptyState.
    • Forms and selection — BCInput, BCTextField, BCTextArea, BCPasswordInput, BCSearchField, BCInputOTP, BCDateField, BCTimeField, BCDateTimePicker, BCSelect, BCControlField, BCCheckbox, BCRadioGroup, BCSwitch, BCSlider, BCRangeSlider.
    • Overlays — BCDialog, BCPopover, BCMenu, and BCToast with top/bottom placement and an interactive swipe-to-dismiss.

    Full prop tables in doc/api.md; the example app has one screen per component.

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive