NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #626 most downloaded on pub.dev
A highly customizable PIN/OTP input field for Flutter with Material Design support and headless core for custom UIs.
Last release 7 days ago
30 Sep 2026
Ships unpredictably
gaps range from 2 weeks to 2.6 years
Some releases are documented
notes for 26 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
66 releases · first in 2019
FIX : hide the invisible input from screen readers.
Packages with breaking changes:
Packages with other changes:
One column per quarter.
Packages with breaking changes:
Packages with other changes:
pin_code_fields@10.0.1
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
pin_code_fields_liquid_glass - v0.1.0-dev.3New dependencies: material_ui and cupertino_ui (the Flutter SDK still ships the old libraries in 3.47, but they are scheduled for deprecation).
Migrate to Flutter 3.47's standalone design-system packages.
package:flutter/material.dart and package:flutter/cupertino.dart are replaced with package:material_ui/material_ui.dart and package:cupertino_ui/cupertino_ui.dart.material_ui and cupertino_ui (the Flutter SDK still ships the old libraries in 3.47, but they are scheduled for deprecation).^3.12.0, Flutter >=3.44.0 (tested on Flutter 3.47.1 / Dart 3.13.1).material_ui's Theme. Apps still on package:flutter/material.dart will not have their ThemeData picked up, so PIN fields fall back to default colors.MaterialPinThemeExtension: Must be registered on material_ui's ThemeData. Registering it on the SDK ThemeData is a compile error.Your app must use material_ui to use 10.x. Migrate with dart fix --apply --code=migrate_design_widgets. If your app is still on package:flutter/material.dart, stay on pin_code_fields: ^9.4.0. MaterialUiCompatibilityBridge only helps the other direction: a migrated app with dependencies that still use SDK Material. See migration/10.0.0/MIGRATION_GUIDE.md.
material_ui / cupertino_ui 1.0 packages so Material types (ThemeData, ColorScheme, selection handles, context menus) stay in sync with the decoupled design system.FIX : hide the invisible input from screen readers.
FIX : show long-press context menu on screen ( #432 ).
Nothing published for this version
FIX : suppress semantic hint and focused state when disabled (#…
Packages with breaking changes:
Packages with other changes:
FEAT: add semanticHintBuilder parameter for customizable accessibility hints.
semanticHintBuilder parameter for customizable accessibility hints.
Theme Extension: Added MaterialPinThemeExtension for embedding MaterialPinTheme in ThemeData
MaterialPinThemeExtension for embedding MaterialPinTheme in ThemeData
ThemeData.extensionsTheme.of(context).materialPinThemeMaterialPinField automatically uses the global theme when no explicit theme is providedForm validation
MaterialPinField styling with FormField capabilities (validator, onSaved, autovalidateMode)ThemeData extension, or defaultreset() clears both text and controller error statePinInput — onClipboardFound, clipboardValidator, onLongPress, onTapOutside, mouseCursor, semanticLabelThis is a complete rewrite with a new headless architecture. Migration required.
This is a complete rewrite with a new headless architecture. Migration required.
PinInput) and a Material Design implementation (MaterialPinField)PinInputController replaces separate TextEditingController, FocusNode, and errorAnimationControllerMaterialPinTheme with automatic ColorScheme resolutionPinInput and PinCellDataMaterialPinField for beautiful, ready-to-use PIN fieldssetText(), clear(), text - Text controltriggerError(), clearError(), hasError - Error controlrequestFocus(), unfocus(), hasFocus - Focus controlMaterialPinTheme.textGradientobscuringWidgetPinInputFormField for form validationenableAutofill and autofillHintssemanticLabel parameter
cursorAlignment: Position custom cursor widgets within cells (e.g., underscore at bottom)onClipboardFound: Callback when clipboard contains valid PIN-like content on focusonTapOutside: Callback when user taps outside the fielderrorText & errorBuilder: Custom error display below the PIN fieldfollowingFillColor & followingBorderColor: Style for cells after the focused cellcompleteFillColor, completeBorderColor & completeTextStyle: Style when all cells are filledClipboard.getData calls are now guarded with a 500 ms timeout so a stalled native clipboard never blocks the UI thread_checkClipboard() dispatched via addPostFrameCallback instead of running synchronously inside the focus listener_safeClipboardRead() with try/catch + .timeout()Center widget that was overriding alignmentPinInputController not notifying listeners on focus/text changes| Old Name | New Name |
|---|---|
controller |
pinController.textController |
focusNode |
pinController.focusNode |
useHapticFeedback |
enableHapticFeedback |
hapticFeedbackTypes |
hapticFeedbackType |
animationType |
theme.entryAnimation |
enableContextMenu |
enablePaste |
errorAnimationController |
pinController.triggerError() |
pinTheme |
theme (MaterialPinTheme) |
enablePinAutofill |
enableAutofill |
Before (v8.x):
PinCodeTextField(
appContext: context,
length: 6,
controller: textController,
focusNode: focusNode,
pinTheme: PinTheme(
shape: PinCodeFieldShape.box,
activeColor: Colors.blue,
),
onChanged: (value) {},
onCompleted: (value) {},
)
After (v9.0):
final pinController = PinInputController();
MaterialPinField(
length: 6,
pinController: pinController,
theme: MaterialPinTheme(
shape: MaterialPinShape.outlined,
focusedBorderColor: Colors.blue,
),
onChanged: (value) {},
onCompleted: (value) {},
)
Before:
final errorController = StreamController<ErrorAnimationType>();
errorController.add(ErrorAnimationType.shake);
After:
final pinController = PinInputController();
pinController.triggerError(); // Triggers shake + sets error state
pinController.clearError(); // Clears error state
Nothing published for this version
Nothing published for this version
Added activeBorderWidth, selectedBorderWidth, inactiveBorderWidth, disabledBorderWidth, errorBorderWidth
activeBorderWidth, selectedBorderWidth, inactiveBorderWidth, disabledBorderWidth, errorBorderWidthUpdated Dart SDK constraint sdk: ">=2.12.0 <4.0.0"
sdk: ">=2.12.0 <4.0.0"PinCodePlatform instead Platform enumNothing published for this version
Added new attributes readOnly, textGradient, errorTextDirection, errorTextMargin, autoUnfocus
readOnly, textGradient, errorTextDirection, errorTextMargin, autoUnfocussetState() after dispose() bugAutovalidateMode.disabled will not add extra space below the pin cells Added new attributes errorBorderColor, readOnly, textGradient and scrollPadding
AutovalidateMode.disabled will not add extra space below the pin cells
Added new attributes errorBorderColor, readOnly, textGradient and scrollPadding
Much requested feature placeholder has been added hintCharacter
hintCharacterhintStyle has been added to customize the hint TextStyleAdded useExternalAutoFillGroup to use this widget with external AutofillGroup
useExternalAutoFillGroup to use this widget with external AutofillGroupfieldOuterPadding to add extra padding on each cells. Default to 0.0Added AutofillContextAction , default is AutofillContextAction.commit
AutofillContextAction, default is AutofillContextAction.commitNothing published for this version
Added haptic feedback enum HapticFeedbackTypes { heavy, light, medium, selection, vibrate, }
Features ✨
Fixes 🐛
obscuringWidget and blinkWhenObscuringAdded fallback color when the cursor color fails to retrive and fixed deprecated List constructors.
Added fallback color when the cursor color fails to retrive and fixed deprecated List constructors.
Fixed read-only warning when field is not enabled & cursor animation now only triggers if showCursor = true
Fixed read-only warning when field is not enabled & cursor animation now only triggers if showCursor = true
Added Cursor ` /// Whether to show cursor or not final bool showCursor;
Added Cursor
`
/// Whether to show cursor or not
final bool showCursor;
/// The color of the cursor, default to Theme.of(context).accentColor
final Color cursorColor;
/// width of the cursor, default to 2
final double cursorWidth;
/// Height of the cursor, default to FontSize + 8;
final double cursorHeight;
`
Added boxhShadows
autoValidate changed according to the new version of FlutterNothing published for this version
Added errorAnimationDuration to customize Error animation duration.
errorAnimationDuration to customize Error animation duration.enablePinAutofill to enable or disable the auto-fill feature.textInputType to more familiar keyboardType to change they keyboard typeNothing published for this version
Added iOS autofill added wtih Flutter version 1.20.0
appContext parameter.Features ✨ Added support for flutter-web Breaking changes ⚠️ Replaced internal automatic OS selection for dialog styles, you can select which style yo…
Features ✨
Added support for flutter-web
Breaking changes ⚠️
Replaced internal automatic OS selection for dialog styles, you can select which style you want by configuring with the DialogConfig
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Introduced PinTheme & DialogConfig
PinTheme & DialogConfigbeforeTextPaste callbackonCompleted callbackNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added animations while changing value
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →