NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A themeable Flutter UI component library for mobile banking and fintech apps. RTL-aware, privacy-aware, accessible widgets that compose into any host app.
Last release 1 months ago
31 Aug 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 6 of 6 stable releases
Nothing withdrawn
no release was ever pulled
3 months old
6 releases · first in 2026
One column per month.
Stability and support policy ( doc/enterprise/stability-and-support.md ): the dependency contract. What counts as a breaking change for a UI kit, incl…
Four themes: the trust artifacts an enterprise intake process asks for, the
token architecture finished end to end, a branded motion system, and the
remaining audit backlog cleared.
BankSkeletonVariant gained four values. listTile, card,
balanceHero, and chart were appended to the four the enum shipped with
in 0.2.0. Dart 3 checks switch exhaustiveness, so a switch over the enum
written against 0.2.0 with no default or wildcard arm stops compiling on
upgrade (non_exhaustive_switch_expression). Adding a wildcard arm is the
whole migration:
// Before: compiles against 0.2.0, fails against 0.3.0.
final caption = switch (variant) {
BankSkeletonVariant.accountCard => 'Loading account',
BankSkeletonVariant.transactionTile => 'Loading transactions',
BankSkeletonVariant.potCard => 'Loading pots',
BankSkeletonVariant.generic => 'Loading',
};
// After: compiles against both.
final caption = switch (variant) {
BankSkeletonVariant.accountCard => 'Loading account',
BankSkeletonVariant.transactionTile => 'Loading transactions',
BankSkeletonVariant.potCard => 'Loading pots',
_ => 'Loading',
};The original four keep their names and their declaration order, so a
persisted index or name still resolves to the same variant. The full list
and its order are pinned by test/async_states_test.dart, so a further
addition cannot ship without another entry under this heading.
doc/enterprise/acr/ACR.md): adoc/enterprise/acr/openacr.yaml, GSA catalog2.4-edition-wcag-2.1-508-eu-en). It is a self-assessment, states so on itsdoc/enterprise/stability-and-support.md): the dependency contract. What.github/workflows/sbom.yml); pub.dev publication over OIDC with no.github/workflows/publish.yml);.github/workflows/release.yml); and a weekly OpenSSF Scorecard run.github/workflows/scorecard.yml). Every third-party GitHub Action isdoc/enterprise/supply-chain.md.README restructured for two readers. The top third now answers what a
bank or agency evaluator asks at intake, as a question-and-evidence table
covering the ACR, the CI-enforced accessibility gates, the compliance
split, the SBOM and provenance chain, the published Scorecard, and the
stability contract, each linked to the document that carries the proof. The
component catalogue, screenshots, and quick start are unchanged in
substance. Counts corrected to 173 exported widget classes and 487 test
cases, and the badges row gains Scorecard and pub.dev.
doc/enterprise/versioning-and-releases.md now describes the release
pipeline as implemented rather than as planned, and corrects the Flutter
floor to 3.44.0 with CI on 3.44.4. Cross-links the new stability policy
rather than restating it. The roadmap milestones are re-dated against what
each release actually contained, and the four journey controllers that did
not land in this one move to v0.4.0 rather than staying pointed at a
version that has shipped.
Documentation corrected where it lagged the code: injectable image
resolution through BankUiScopeData.imageResolver ships, so the README no
longer lists air-gapped image loading as a roadmap item.
Design-token architecture completed: the DTCG source now carries a
12-rung neutral ramp, surface and ink tiers, border roles, a six-rung
icon-size ladder, an opacity ladder, and an elevation-tier enumeration.
BankThemeData.custom and fromJson read their greys from these tokens
instead of hard-coding them, with no behaviour change. Typography gains a
line-height ladder on every text style and caps-tracking tokens.
Branded sheet presentation (BankSheet, BankDialog): all 31 modal
surfaces in the kit (23 BankSheet.show call sites and 8 BankDialog.show)
now present with the theme's radius, a brand-derived
scrim, a grab handle with semantics, an optional shared header,
keyboard-aware insets, and token motion that collapses under reduced
motion. No stock showModalBottomSheet or showDialog call remains in
lib/.
BankAsyncContent plus skeleton shapes built from the kit's real
anatomy, so loading, error, empty, and content are one switch rather than
a host-assembled pile of grey rectangles.
BankSliverAppBar and app-bar title modes (standard, large,
collapsing), and an opt-in per-step help affordance on
BankStepProgressIndicator for regulated journeys.
Identity system: BankEmblem gains a size ladder, theme-derived tints
that measure their own contrast to clear AA on any hue, an inset ring
slot, and BankEmblemStack with +N overflow.
BankValueDiffRow.previousLabel and BankValueDiffRow.newLabel, and
the same two parameters on BankValueDiffList. Both BankValueDiffStyle
variants now render one grammar, old value then arrow then new value, so
the 'Previous' / 'New' microlabels are gone from the output and passing
a value has no effect. There is no replacement parameter: the old-to-new
relationship is carried by the struck value and the arrow, and what
assistive technology says about the row is localised through
semanticLabel. BankValueDiffList no longer forwards either parameter to
its rows, so the analyzer warning reaches the call site that set it rather
than being swallowed. Both are removed in 0.5.0.
// 0.2.0: two captioned lines, 'Précédent 5 000,00 €' / 'Nouveau 8 000,00 €'.
BankValueDiffRow(
label: 'Limite',
oldMoney: previous,
newMoney: next,
style: BankValueDiffStyle.stacked,
previousLabel: 'Précédent',
newLabel: 'Nouveau',
)
// 0.3.0: '5 000,00 € → 8 000,00 €', the old value struck through.
BankValueDiffRow(
label: 'Limite',
oldMoney: previous,
newMoney: next,
style: BankValueDiffStyle.stacked,
semanticLabel: 'Limite passe de 5 000,00 € à 8 000,00 €',
)BankConsentModal and BankDisclosureConsentSheet, and every tappableBankEmblemStack); the IBAN copy affordance confirmsBankSheetHandle; the sliders in BankCardControlsPanel,BankCreditLimitAdjuster and BankTransferLimitManager sat insideexcludeSemantics: true, which deleted the framework's slider nodeBankSliverAppBar in itsnamesRoute beside the large title. The sliders inBankLoanCalculatorCard and BankSavingsProjectionCard still excludeBankMoneyFormatter.format(currencyCode: 'BHD', ...) د.ب1,234.567, a stray leading space and the marker glued to theد.ب 1,234.567. The gap now sits outside thesplitMajorMinor carries theBankPrizeDrawCard formatted prizeAmount and its semantic summaryIntl.defaultLocale rather than the app locale, so aUSD 500,000 and a German reader parsed it as fivecontext.bankLocale, matching every other moneySpacer for the action row's slack and ellipsizedCard.elevation sentinel or on a directBankTokens.shadow* call, so two resting cards on one screen no longerBankThemeData.gradientReach is now read at theBankHorizontalAccountCard's theme-gradient facegradientReach never rations, so it renders identically either way.test/policy_adoption_test.dart asserts both policies on the paintedtheme.accentGradient or BankTokens.shadow* rawA premium-quality overhaul driven by a full visual and code audit against Backbase-class design systems: 7 systemic themes, 76 ranked defects, the top
A premium-quality overhaul driven by a full visual and code audit against
Backbase-class design systems: 7 systemic themes, 76 ranked defects, the top
24 fixed in this release.
BankPressable wrapper gives cards,BrightnessCard elevations migrated to thedisplayFontFamily (Heritage gets a bundledcardSurfaceGradient, andBankCardPattern overlays (mesh, lattice, arcs, grid), allmarkBuilder escape hatch for licensed artwork; shared metallicBankCardChip and a single PAN treatment across all card widgets.BankSegmentedControl: theme-driven segmented control (no M3BankCountryFlag: tofu-proof country indicator (crafted ISO chip byflagBuilder override on BankUiScope).trimZeroCents, splitMajorMinor, deliberateButtonStyle.textStyle).BankAccountCard: dead 70-90 px band removed (content-sized), restingannualRate documented and asserted as a fractionTurns the kit from a widget library into a design system : tokens become platform-neutral data, money formats per locale, and accessibility is enforce
Turns the kit from a widget library into a design system: tokens become
platform-neutral data, money formats per locale, and accessibility is enforced
in CI.
tokens/design-tokens.json): thelib/src/theme/tokens.dart via tool/generate_tokens.dart, with a CI drift--check). Composite tokens (text styles, curves, shadows) stayBankThemeData.toJson() / .fromJson(): any brand (including the four#RRGGBBAA hex) for Figma Variables,tokens/themes/ (regenerate via test/theme_export_test.dart).BankMoneyFormatter.format/formatSignlocale so grouping and separators follow the market (German1.234.567,89, French 1 234 567,89, Indian lakh 12,34,567.89). CoreLocalizations automatically; the newBuildContext.bankLocale extension exposes it for direct formatter calls.kBankFontFallback): OFL NotofontFamilyFallback on every text style and theme — so every script the kitdoc/enterprise/design-tokens.md documenting the token pipeline.onPrimary (2.78:1 → dark ink), Heritage dark onPrimary (4.44:1), and thepositiveBalance 2.26:1, pending 2.03:1,negativeBalance). Semantic colours are now brightness-aware (AA-compliantBankThemeData.custom().alchemist dev dependency — it never compiled against Flutter 3.44 (missingCanvas methods) and is replaced by Flutter-native golden tests.Adds a product-origination surface and a complete reference app.
Adds a product-origination surface and a complete reference app.
lib/src/products/): BankProductCardBankProductCategoryTile (catalogue grid), BankEligibilityResultCardBankOfferSummaryCard (firm or indicative offer with the regulatoryBankRatioGauge (LTV / DTI / LTI affordabilityBankDisclosureConsentSheet (pre-contract disclosures andBankESignaturePad (typed or drawn,BankApplicationController: a seven-step application statecore.dart.flutter run -t lib/flagship_main.dart.doc/research/banking-products.md.BankEligibilityResultCard's primary action now sets its label colourRaised the Flutter floor to >=3.44.0 and migrated every deprecated API to its current replacement: Switch activeColor to activeThumbColor , SemanticsS…
Maintenance release: clears the pub.dev analysis findings for a clean score.
fl_chart to ^1.2.0 and qr to ^4.0.0 (both now on theirqr 4.x QrPayload API.>=3.44.0 and migrated every deprecatedactiveColor toactiveThumbColor, SemanticsService.announce to sendAnnouncement,SizeTransition.axisAlignment to alignment, Matrix4.scale toscaleByDouble, and DropdownButtonFormField.value to initialValue.No public API changes; widgets render and behave exactly as before.
Initial public release: 140+ composable banking widgets across 22 domains, four built-in design languages, and one theming engine.
Initial public release: 140+ composable banking widgets across 22 domains, four built-in design languages, and one theming engine.
BankThemeData.custom() (only primary and brightness
required) and the ThemeData.withBankTheme() extension.BankBalanceText and every money surface mask through
BankUiScope, verified by a mask-proof test across the render and
semantics trees.NumeralStyle.BankUiStrings localization escape hatch; no gen-l10n dependency.Decimal-backed Money type; no double touches an amount.BankKycFlowController,
BankTransferFlowController, BankIncomeSorterController) that never
touch the network.flutter analyze clean on the package and the example app.example/.Your coding agent can read these notes before it upgrades. Set up the MCP server →