Documentation Index
Fetch the complete documentation index at: https://neo.tvk.company/llms.txt
Use this file to discover all available pages before exploring further.
1.8.0
Side panels, image picking, and quality-of-life improvements! This release introduces the new side panel system for both layouts, an image picker widget, expanded modal sizes, and refined button interactions.BREAKING CHANGES ๐จ
NeoButton Default Hold Duration
- Changed default
holdDurationfrom 3 seconds to 1 second for a snappier hold-to-confirm experience. If you rely on the previous default, explicitly setholdDuration: const Duration(seconds: 3).
New ๐
NeoSidePanel
- New utility class for managing side panel visibility alongside your layouts. Supports
show,hide, andtogglemethods with customizable width and ID-based panel management. - Works with both
NeoSidebarLayoutandNeoTopbarLayout.
NeoImagePicker
- New widget for selecting images via file picker or drag-and-drop. Features automatic format validation, file size limits, loading states, error handling, and a clear button with hover-to-swap interaction.
NeoModal Extra Large Size
- Added
extraLargeoption toNeoModalSizeenum (1536px max width) for displaying larger modal dialogs.
Improvements ๐ช
NeoModal Size Adjustments
- Increased
mediummodal width from 500px to 640px andlargefrom 600px to 896px for better content display.
NeoButton Nudge Animation
- Hold-to-confirm buttons now show a nudge animation when quickly tapped, visually indicating that the button requires holding.
Loading Indicator Update
NeoCard Clipping
- Card now properly clips child content to prevent overflow beyond the border radius.
Fixes ๐
- Fixed an issue where phantom touch events on iOS could immediately dismiss
NeoModalupon mounting.
1.7.0
Happy New Year! ๐Major field improvements, new topbar layout, and Dart SDK upgrade! This release introduces hold-to-confirm buttons, enhanced input field focus management, and the newNeoTopbarLayout for top navigation patterns.BREAKING CHANGES ๐จ
Field Widget API Changes
Input field submitOnBlur removal: RemovedsubmitOnBlurproperty fromNeoTextField,NeoTextArea,NeoDateField, andNeoTimeField. Use the newonBlurcallback instead.NeoDateField: ChangedonSubmittedcallback signature fromValueChanged<String>toValueChanged<String?>. The callback now receivesnullwhen the field is cleared or contains invalid input.NeoTimeField: ChangedonSubmittedcallback signature fromValueChanged<TimeOfDay>toValueChanged<TimeOfDay?>. The callback now receivesnullwhen the field is cleared or contains invalid input.- Duration tokens renamed to semantic values: The
NeoDurationTokensclass now uses semantic values (short,medium,long) instead of specific use-case tokens (pressed,hover,sidebar,toggleSwitch,dropdown). Update any code that references the old duration token properties to use the appropriate semantic value. - Minimum Dart SDK version increased: Now requires Dart SDK
>=3.10.0(previously>=3.3.3) - Minimum Flutter version increased: Now requires Flutter
>=3.38.0(previously>=3.0.0)
New ๐
NeoTopbarLayout
- New layout widget for creating applications with top navigation bars. The layout includes a top bar area and a main content area with automatic safe area handling.
NeoButton Hold-to-Confirm
- Added
requireHoldproperty for hold-to-confirm functionality. When enabled, users must hold the button for a specified duration before the action is triggered. - Added
holdDurationproperty to customize the hold duration (defaults to 3 seconds). - Note:
requireHoldis only supported forNeoButtonVariant.outlinedbuttons. - Added
fgHoverColorandfgPressedColorproperties for customizing foreground colors in hover and pressed states. - Added
buttonFgHoverandbuttonFgPressedcolor tokens toNeoColorTokensfor theme customization.
Input Field Enhancements
- Added
showClearButtonproperty toNeoTextField,NeoDateField, andNeoTimeFieldfor easier input clearing - Added
onBlurcallback toNeoTextField,NeoTextArea,NeoDateField, andNeoTimeFieldfor explicit blur event handling - Added optional
focusNodeproperty toNeoDateFieldandNeoTimeFieldfor external focus management
Improvements ๐ช
Input Field Enhancements
- Improved focus handling in all input fields to prevent duplicate unfocus events when focus changes occur within submission callbacks.
NeoDateFieldandNeoTimeFieldnow properly handle Enter key presses to submit and unfocus when the field is complete or empty.- Added animated helper text transitions to
NeoTextField,NeoDateField,NeoTimeField,NeoTextArea, andNeoDropdownFieldfor smoother error and description text display.
Dart Dot Shorthands Support
- With the Dart SDK upgrade to 3.10.0+, you can now use the new dot shorthand syntax in your code for more concise syntax.
| Before | After |
|---|---|
variant: NeoButtonVariant.outlined | variant: .outlined |
mainAxisSize: MainAxisSize.min | mainAxisSize: .min |
padding: EdgeInsets.all(theme.spacings.extraSmall) | padding: .all(theme.spacings.extraSmall) |
Riverpod Updates
- Updated
riverpod_annotationto version4.0.0for improved performance and new features.
Fixes ๐
- Fixed duplicate submission bug where pressing Enter would trigger both Enter submission and blur submission. Fields now track submission source to prevent duplicate calls to
onSubmitted.
1.6.0
Enhanced dropdown capabilities, improved field submission behavior, and streamlined sidebar state management. This release introduces multi-select dropdowns, automatic field submission on blur, and performance improvements to sidebar state handling.BREAKING CHANGES ๐จ
NeoDropdownField API Changes
- The widget is now generic and uses
selectedinstead ofselectedId - Migration:
- Change
selectedId: String?toselected: String?(for single-select) orselected: Set<String>(for multi-select) - Change
onChanged: ValueChanged<String?>toonChanged: ValueChanged<String?>(single-select) orValueChanged<Set<String>>(multi-select)
- Change
NeoSidebarStates API Changes
- The property
activeItemand methodsetActiveItem(String item)have been removed fromNeoSidebarStatesandNeoCurrentSidebarStatesnotifier - Rationale: This property was not needed as you can determine the current path locally in your application code. Use the current path to decide which
NeoSidebarButtonshould be active, rather than storing it in the sidebar state. Additionally, tracking the active path did not fit within the scope of sidebar states, which should focus on UI state (collapsed, hidden, etc.) rather than application routing state - Migration: Remove all references to
activeItemand any calls tosetActiveItem(). Instead, determine the active button based on your current route path locally
New ๐
NeoDropdownField Multi-Select Support
- Added multi-select support to
NeoDropdownField. When usingSet<String>as the generic type, users can select multiple items - Selected items are displayed as comma-separated labels
Improvements ๐ช
Field Submission Behavior
- Added
submitOnBlurproperty toNeoTextField,NeoTextArea,NeoDateField, andNeoTimeField. When enabled (defaults totrue), these fields will automatically callonSubmittedwhen the field loses focus, providing better form submission behavior
NeoModal Size Options
- Added
sizeparameter toNeoModal.show()method. The modal now supports three size options (NeoModalSize.small,NeoModalSize.medium,NeoModalSize.large) with corresponding max widths (400px, 500px, 600px respectively). Defaults toNeoModalSize.smallfor backward compatibility
NeoSidebarStates Performance
- Improved sidebar state management performance.
NeoSidebarStatesprovider now only initializes when actually usingNeoSidebarLayout, preventing unnecessary provider initialization in apps that donโt use the sidebar layout
Fixes ๐
- Fixed validation assert:
maintainFocusOnSubmitandsubmitOnBlurcannot both betrueinNeoTextFieldandNeoTextArea. An assert now prevents this invalid configuration - Fixed
maintainFocusOnSubmitnot working properly inNeoTextField. The field now correctly maintains focus when Enter is pressed andmaintainFocusOnSubmitistrue - Fixed duplicate submission bug where pressing Enter would trigger both Enter submission and blur submission. Fields now track submission source to prevent duplicate calls to
onSubmitted
1.5.0
Introducing Neoโs time input capabilities! This release adds a time field widget with segmented input and intelligent navigation.New ๐
NeoTimeField
- Time input widget with segmented HH:MM format and advanced interaction features:
- Smart segmented input: HH:MM format with intelligent auto-advance between segments
- Keyboard navigation: Arrow keys for navigation between segments and value increment/decrement
- Input validation: Real-time value capping for valid time ranges (00:00-23:59)
1.4.1
Quick bug fix release addressing field widget issues within modals and text area resizing behavior.Improvements ๐ช
- Fixed
NeoTextAreamanual resize behavior by correcting height calculation
Fixes ๐
- Fixed a bug where
NeoTextFieldandNeoDropdownFieldwere throwing errors when used inside of aNeoModal
1.4.0
Major expansion of Neoโs input capabilities! ๐ This release introduces the multi-line NeoTextArea widget, comprehensive date validation utilities, a clean card component, and significant improvements to date field functionality with a completely rewritten segmented input experience.BREAKING CHANGES ๐จ
NeoDateField API Changes:- Changed from
DateTime?properties to string-based API for enhanced flexibility dateStringproperty replaces previous date propertiesonSubmitted(String)callback replaces previousonSubmitted(DateTime?)callback- This enables custom validation flows, internationalized error messages, and auto-correction features
New ๐
NeoTextArea
- Multi-line text input widget with advanced features:
- Auto-resizing: Configurable min/max lines with automatic height adjustment
- Manual resizing: Optional drag handle for user-controlled sizing
- Keyboard shortcuts: Smart text submission (Enter vs Cmd/Ctrl+Enter based on
submitOnEntersetting) - Comprehensive properties: Label, placeholder, description, error text, validation, and focus management
NeoCard
- Clean card component with configurable padding (defaults to
theme.spacings.large) - Perfect for grouping content with consistent styling and subtle shadows
NeoDateValidator
- Comprehensive date validation utility with 7 validation methods:
validate(String)- Parses and validates DD-MM-YYYY format with detailed error messagesvalidateIsBefore(DateTime, DateTime)- Validates date is before another datevalidateIsAfter(DateTime, DateTime)- Validates date is after another datevalidateIsInRange(DateTime, DateTime, DateTime)- Validates date is within range (inclusive)validateIsNotFuture(DateTime)- Validates date is today or earliervalidateIsNotPast(DateTime)- Validates date is today or laterformat(DateTime)- Formats DateTime objects to DD-MM-YYYY string
Other New Features
NeoApp: Added optionalwrapperparameter for custom root-level widget wrapping
Improvements ๐ช
NeoDateField - Complete Rewrite
- Smart segmented input: DD-MM-YYYY format with intelligent auto-advance between segments
- Keyboard navigation: Arrow keys for navigation between segments and value increment/decrement
- Focus management: Proper tab order integration with automatic segment selection
- Input validation: Real-time value capping and context-aware month day limits
- Enhanced UX: Tap-to-select segments, automatic padding, and seamless interaction flow
- Flexible error handling: Allows invalid dates in field state, moving validation to end-user side for custom UX flows
NeoTextField Improvements
- Enhanced platform consistency: Replaced
EditableTextwithCupertinoTextFieldfor better native behavior - Improved error handling: Fixed error text display to only show when error text is not empty, preventing layout jumps
NeoModal Enhancement
- Enhanced backdrop: Added gradient effect for smoother visual transition
Fixes ๐
NeoTextField: Fixed error text layout jumps from empty error messages
1.3.0
API standardization and UX polish across the board. This release finalizes the Date Field, unifies disabled/error states, and introduces a few small but meaningful visual improvements and fixes.BREAKING CHANGES ๐จ
These rename-only changes standardize content and boolean property names. Behavior is unchanged.| Widget | Old Property | New Property |
|---|---|---|
NeoButton | text | label |
NeoSidebarButton | text | label |
NeoSidebarButton | caret | hasCaret |
NeoBadge | text | label |
NeoTable | selectable | isSelectable |
NeoTooltip | text | label |
NeoTooltip | trigger | child |
NeoTabBar | expanded | isExpanded |
NeoTab | text | label |
NeoDropdownMenuItem | danger | isDanger |
New ๐
NeoDateField: finalized segmented DD-MM-YYYY input- Keyboard navigation and smart selection handling
- Normalizes input and supports disabled state
- New
onSubmitted(DateTime? value)callback
- Added
autofocusSearchOnOpenproperty toNeoDropdownField. Whentrue, the search field will be focused when the dropdown is opened - Added
isEnabledproperty toNeoTextField,NeoDropdownFieldandNeoToggleSwitchfor consistent disabled-state visuals and behavior
Improvements ๐ช
- Error state now shows a danger-colored border when
errorTextis set acrossNeoTextField,NeoDropdownField, andNeoDateField - Refined
shadows.smalltoken for subtler depth
Fixes ๐
- Deselect text when unfocusing in
NeoTextField
1.2.0
Major improvements across the framework! ๐ This release introduces a new Modal widget and brings significant enhancements to buttons, toasts, themingโplus important API improvements and some breaking changes to be aware of.BREAKING CHANGES ๐จ
NeoButton: RemovedNeoButtonSize.expandedfrom thesizeproperty enumโuse the newisExpandedboolean property insteadNeoTabBar:activeTabIdandonChangeproperties are now required (changed from nullable)- Field widgets height change:
NeoTextField,NeoDropdownField, andNeoDateFieldchanged from flexible height to fixed height (44.0) - may affect layouts relying on flexible field height
New ๐
NeoModal
- A new overlay widget for creating modals, dialogs, confirmations, and custom popups
- Features builder-based API with
contentBuilderandactionsBuilderfor flexible layouts
Theming System Additions
- Added
NeoShadowTokenswithsmallandmediumshadow definitions - Added semantic color tokens:
success/onSuccess,warning/onWarning,danger/dangerHover/dangerPressed/onDanger - Added button-specific tokens:
buttonBg,buttonBgHover,buttonBgPressed,buttonFg - Added contrast tokens:
fgOnContrastandbgContrast - Added
greencolor toNeoPalettewithfgSuccessandfgOnSuccesstokens
NeoButton Additions
- Added new states:
isLoading,isDanger,isEnabledproperties for loading, danger, and disabled states - Added a new variant:
NeoButtonVariant.link, for underlined link-style buttons - Added
isExpandedproperty for expanded buttons (replacesNeoButtonSize.expanded) - Added
isCaretRotatedproperty for animated dropdown-style carets - Added enhanced color customization:
bgColor,bgHoverColor,bgPressedColor, andfgColorproperties
NeoToast Additions
- Added
NeoToastTypeenum with preset configurations (info,loading,success,warning,danger) - Added
NeoToast.update()method for dynamically updating existing toasts - Added toast descriptions with optional
descriptionparameter - Added sophisticated toast stacking system with dynamic height calculation
Other Widget Additions
- Added
labelproperty toNeoDividerfor labeled dividers - Added
errorTextandallowDeselectproperties toNeoDropdownField - Added
fixedRowHeightproperty toNeoTablefor consistent row heights - Added optional
focusNodeproperty toNeoTextFieldfor better focus management - Added smart log filtering to
NeoLoggerwith automatic build mode detection- Debug builds show all log levels (
trace,debug,info,warning,error,fatal) for comprehensive debugging - Release builds only show info level and above to reduce noise and improve performance
- This means you can safely leave
traceanddebugcalls throughout your codebase during development - they wonโt clutter the user experience in production builds
- Debug builds show all log levels (
Improvements ๐ช
NeoButton Improvements
- Better interaction feedback with refined animations and shadows
- More sophisticated color calculations for different variants and states
NeoToast Improvements
- Complete visual redesign with modern card-based styling and enhanced shadows
- Intelligent preset system with automatic icon/color configuration and auto-dismiss behavior
- Advanced animation system with staggered entrance, elastic positioning, and smooth dismissal
Theming & Widget Improvements
- Restructured color palette with semantic naming (e.g.,
green500,red500,red600) NeoDropdownField: Improved search bar implementation- Standardized logging format across all Neo widgets with consistent
[Neo] [WidgetName]prefixes for easier debugging and filtering
Fixes ๐
- Fixed toast positioning, stacking, memory leaks, and race conditions
- Fixed
isDismissablebug in dropdown widgets - Updated deprecated
withOpacity()calls to usewithValues(alpha:)for Flutter compatibility
1.1.0
A new widget has landed! ๐ (Plus a few improvements)New ๐
- Added
NeoTabBar. Itโs a barโฆ of tabs! Useful for content switching. - Added
NeoTab. This is used withinNeoTabBarto pass data like text and icon.
Improvements ๐ช
- Added the
enabledproperty toNeoCheckbox. If it is false, it is not clickable and has a visual disabled state - Added
onRowHoverproperty toNeoTable. This is a callback that can be used, for example, to show action buttons only on hover over a single row, giving your overall screen a cleaner look - Removed the scaling animation from both
NeoButtonandNeoSidebarButton - Removed the border from the
filledvariant of theNeoButton; this gives it a cleaner look
1.0.1
Hey there! ๐ Hereโs a quick improvement and fix for you!Improvements ๐ช
- Added
defaultLightThemeanddefaultDarkThemeproperties toNeoApp. This will now allow you to set default themes at startup. When not provided,NeoAppwill use the defaultNeoThemeLightandNeoThemeDark
Fixes ๐
- We forgot to add the new
NeoSidebarLayouttoneo.dart, so you had to import this separately to use it. This is fixed!
1.0.0
The official 1.0.0 release of Neo! ๐ This is a major milestone in our journey to empower developers to create stunning, responsive apps with ease. From the first pre-release almost exactly one year ago to now, weโve been building a robust foundation, and this release brings powerful new features and polished improvements to make your development experience smoother and more delightful. Now letโs craft beautiful apps together! ๐New ๐
- Added the
NeoTablewidget. We finally got tables now! ๐ More features to come in the future.- Also added
NeoTableColumnandNeoTableRow. Youโll use these widgets to populate the table
- Also added
- Added the
NeoSidebarLayoutassembly (weโre still deciding on the naming of these big โwidgetsโ). It manages the layout of aNeoSidebarand main content, providing the ability to collapse or completely hide the sidebar. Hiding the sidebar will now also completely hide the padding around the main area, giving a more fullscreen feel. This change animates so everything feels fluent! TheNeoSidebarLayoutalso supports mobile platforms, and there the sidebar pushes the main content to the side instead of scaling it
Improvements ๐ช
- Made the
NeoBadgestable. It now always scales correctly to its contents; this was a bit wonky before, but not anymore! - Improve the look of the
NeoBadge; itโs now a lot more visible in different theming scenarios. - Made the
NeoSidebarButtonwork with the improvedNeoBadge, it now correctly animated into an indicator when collapsing the sidebar - Added
isIndeterminateproperty toNeoCheckboxwhich will show a dash inside of the checkbox for indeterminate states like a select/deselect all box in a table when some but not all rows are selected
0.4.1
New ๐
- Added haptic feedback support for MacOS trackpads
- Added new
NeoHaptics.error()haptic
Improvements ๐ช
- Added optional MacOS support toggle for haptic feedback methods (disabled by default since trackpads already provide native feedback for clicks - enable with
enableMacOS: truewhen additional feedback is desired, e.g., during drag operations) - Updated documentation to align with all the recent changes and the Neo CLI
0.4.0
Here we go againโฆ We forgot to keep track of changes again so this is a bit rough. ๐ตโ๐ซ Butโฆ weโve implemented a new system for creating release notes so from now on it should be a lot better! ๐There are a lot more small improvements and fixes but here are the most notable ones:New ๐
- Added Toasts! (
NeoToastProvider&NeoToast) - Added
NeoCodeBlock - Added
NeoDateField(Keep in mind that this is an alpha-release and it is very much not ready for production use) - Added
NeoRotation
Improvements ๐ช
- Added search functionality to
NeoDropdownField(Including an empty state) - Added sticky header functionality to
NeoDropdown - Added icon and suffix support to
NeoTextField - Improved animation curves of
NeoToggleSwitch - Added
keyboardType,inputFormatters,errorText,autofillHints,onSubmittedandmaintainFocusOnSubmitproperties toNeoTextField - Weโve completely overhauled the way overlays work
- Improved the docs
0.3.0
This is a big pre-release with a lot of changes. We kind of forgot to keep track of changes so this is a bit rough. ๐ตโ๐ซNew ๐
NeoSidebarButtonA button widget specifically designed for the use in sidebarsNeoHapticsA system that provides haptic feedback on iOS (Also works with Apple Pencil!)NeoSidebarNeoSafeAreaA widget that ensures content is not obstructed by system UINeoToggleSwitchNeoCheckboxNeoLoggerA system that provides a better debugging experienceNeoBadgeA widget designed to display status information or tags, for instanceNeoDividerA widget that can be used to separate contentNeoTooltipA widget that can be used to display information on hover over a triggerNeoTextFieldA widget that can be used to input textNeoDropdownSectionPrimitiveNeoFieldPrimitiveNeoListItemPrimitiveNeoDropdownNeoDropdownMenuSectionA section of a dropdown menuNeoDropdownMenuItemA single item in a dropdown menu (Used inNeoDropdownMenuSection)NeoDropdownFieldSectionA section of a dropdown fieldNeoDropdownFieldItemA single item in a dropdown field (Used inNeoDropdownFieldSection)
Improvements ๐ช
- Improved the theming system
- Improved
NeoButton
0.2.0
New ๐
- Added
primary,filled,outlineandghostvariants for theNeoButton - Replaced the font
GeistwithInter. This is now the default font for Neo - Added more (and renamed some) colors, textstyles, radii, spacings and durations
Improvements ๐ช
- Made the default text blue and
strikethroughso itโs obvious where a textstyle should be added
0.1.0
New ๐
- Added
NeoInitializerwidget. A utility widget designed to streamline the initialization process of the Neo framework. This widget manages crucial startup tasks, ensuring that the environment is properly set up before any UI components are loaded - Added
GeistandGeist Monofonts. These are now the default fonts for Neo
0.0.1
The first pre-release of Neo is here! ๐ This is just the beginningโour starting line. With this release, we lay the groundwork for a future where our developers can build beautiful apps incredibly fast. Hereโs to the journey ahead! ๐ปNew ๐
NeoAppwidget. This will act as the root of the app and manage everythingNeoButtonwidget- Initial release of the Neo theming system, including:
- Basic light and dark theme support
- Dynamic theme switching based on system settings and user preferences
- Basic color, radii and spacing settings in
NeoThemeclass

