NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A comprehensive Flutter adaptive dialog manager package that provides multi-platform dialog support with responsive design, accessibility features, and platform-specific behaviors.
Last release 1 years ago
10 Sep 2025
Release timing varies
gaps range from 9 days to 6 weeks
Nearly every release is documented
notes for 18 of 18 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
18 releases · first in 2025
Fix consecutive sync snackbar display bug without a delay
No breaking changes to existing functionality
One column per month.
No breaking changes to existing APIs or method signatures
Complete Configuration Parameter Support
info(), success(), warning(), error(), loading(), action(), custom(), toast(), banner(), persistent()Full Parameter Coverage
platformType, position, behavior, animationType, breakpointcustomContent, actionLabel, onActionPressed, onDismissed, onShownshowIcon, icon, showAction, showCloseButton, tapToDismiss, swipeToDismissdismissible, autoDismiss, dismissDirection, animationDuration, animationCurvebackgroundColor, textColor, iconColor, actionColor, borderRadius, elevationmargin, padding, width, height, minWidth, maxWidth, minHeight, maxHeight, customOffset, useSafeArea, floatingMarginstackIndex, groupId, persistentId, replacementId, allowDuplicatesshowProgress, progressValue, additionalData, semanticLabelpriority, durationComprehensive Customization
Type Safety & Consistency
Developer Experience
Backward Compatibility Maintained
Enhanced Flexibility
copyWith() for advanced customizationThis is a major version update with breaking changes:
AsyncDialogButton Widget
AsyncDialogButton widget that displays loading indicators during async operationsMulti-Platform Async Button Variants
AsyncDialogTextButton for Material Design text buttons with async supportAsyncCupertinoDialogAction for iOS-style dialog actions with loading statesEnhanced Dialog Actions
CancellableFutureOrCallback in DialogAction.onPressedCancellationToken Implementation
CancellationToken class for cancelling async operationsCancellationTokenSource for managing token lifecycle and cancellationCancellationToken.cancelled and CancellationToken.noneOperation Cancellation Support
OperationCancelledException for proper async operation terminationthrowIfCancelled() method for early cancellation detectionAsync Operation Integration
DialogInteractionController Class
disableActionsOnPress feature to prevent multiple simultaneous actionsEnhanced Dialog Interaction Management
_DialogWrapper widget for centralized interaction controlAction State Coordination
GlobalDialogButtonStyleConfig Model
Predefined Style Configurations
Smart Style Resolution System
New DialogConfig Properties
disableActionsOnPress boolean for controlling interaction behaviorprimaryButtonStyle, secondaryButtonStyle, destructiveButtonStylecupertinoTextStyle, cupertinoDestructiveTextStyleDialog Manager Interface Extensions
setGlobalButtonStyleConfig() method for setting global button stylesgetGlobalButtonStyleConfig() method for retrieving current configurationresetGlobalButtonStyleConfig() method for resetting to defaultsdisableActionsOnPress parameter support in showAlert() and showConfirmation() methodsAdvanced Button Rendering System
Dialog Lifecycle Management
Library Export Updates
AsyncDialogButton, DialogInteractionController, and CancellationToken to public APIGlobalDialogButtonStyleConfig to main library exportsDialogConfig Model Updates
copyWith() method to include all new interaction propertiestoMap() and fromMap() methods with new configuration fieldsDialogAction Model Updates
onPressed callback to support CancellableFutureOrCallbackAsync Operation Safety
Dialog Interaction Consistency
Type Safety Improvements
Enhanced API Documentation
Interactive Example Updates
Optimized Async Operations
Enhanced Resource Management
DialogAction.onPressed Signature Change
DialogAction.onPressed callbacks must be updated to new signatureonPressed callbacks require manual updatesEnhanced Functionality (Non-Breaking)
DialogAction.onPressed callback signature changed from VoidCallback? to CancellableFutureOrCallback?onPressed callbacks now receive an optional CancellationToken parameterDialogAction.onPressed must be updated to match new signatureBefore (v1.x):
DialogAction(
label: 'Save',
onPressed: () {
// Sync operation
saveData();
},
)
// Or async (workaround):
DialogAction(
label: 'Save',
onPressed: () async {
await saveData(); // No cancellation support
},
)
After (v2.0.0):
DialogAction(
label: 'Save',
onPressed: ({CancellationToken? token}) {
// Sync operation
saveData();
},
)
// Or async with cancellation:
DialogAction(
label: 'Save',
onPressed: ({CancellationToken? token}) async {
await saveData(cancellationToken: token);
},
)
This is a major version update with breaking changes:
⚠️ BREAKING CHANGES REQUIRE CODE UPDATES
Step 1: Update DialogAction callbacks
// OLD (will cause compilation errors):
DialogAction(
label: 'Action',
onPressed: () { /* code */ },
)
// NEW (required format):
DialogAction(
label: 'Action',
onPressed: ({CancellationToken? token}) { /* code */ },
)
Step 2: Update async operations
// OLD:
onPressed: () async {
await longRunningTask();
},
// NEW (with cancellation support):
onPressed: ({CancellationToken? token}) async {
await longRunningTask(cancellationToken: token);
},
Enhanced Usage Examples:
// Existing sync dialogs continue to work unchanged
await AdaptiveDialogManager.instance.showAlert<void>(
context: context,
title: 'Simple Alert',
content: 'This works exactly as before',
);
// New async dialog with cancellation support
await AdaptiveDialogManager.instance.showConfirmation(
context: context,
title: 'Async Confirmation',
content: 'This dialog supports async operations',
disableActionsOnPress: true, // Prevent multiple clicks
confirmAction: DialogAction(
label: 'Save Data',
onPressed: ({CancellationToken? token}) async {
// Async operation with cancellation support
await saveDataToServer(cancellationToken: token);
},
),
);
// Global button style configuration
AdaptiveDialogManager.instance.setGlobalButtonStyleConfig(
GlobalDialogButtonStyleConfig.material()
);
// Custom async button in dialog config
DialogConfig(
title: 'Custom Dialog',
actions: [
DialogAction(
label: 'Process',
isPrimary: true,
onPressed: ({CancellationToken? token}) async {
try {
await performLongRunningTask(token: token);
} on OperationCancelledException {
// Handle cancellation gracefully
}
},
),
],
disableActionsOnPress: true, // Prevent interaction during processing
),
Key Benefits After Migration:
Migration Effort:
DialogAction.onPressed callbacks to new signatureNo breaking changes to existing dialog APIs or method signatures
GlobalDialogPaddingConfig Model
dialogPadding, titlePadding, contentPadding, actionsPadding, buttonPadding, iconPadding, and insetPaddingtoMap() and fromMap() methods for configuration persistencePredefined Padding Configurations
GlobalDialogPaddingConfig.minimal(), .spacious(), .compact()Enhanced Dialog Manager Interface
setGlobalPaddingConfig(GlobalDialogPaddingConfig config) method for setting global defaultsgetGlobalPaddingConfig() method for retrieving current global configurationresetGlobalPaddingConfig() method for resetting to default valuesDialogManager interface maintaining backward compatibilitySmart Default Integration Logic
DialogConfig properties use EdgeInsets.zeroInteractive Configuration Example
Enhanced Material Dialog Builder
_buildMaterialDialog() to use global padding configuration as intelligent defaultsLibrary Export Updates
GlobalDialogPaddingConfig to main library exports for public API accessType Safety Improvements
Configuration Consistency
Enhanced API Documentation
GlobalDialogPaddingConfig class and all factory constructorsInteractive Example Documentation
The global padding configuration system enables several advanced scenarios:
DialogConfig usage continues to work without modificationEdgeInsets.zeroThis is a minor version update with full backward compatibility:
No Breaking Changes: All existing code continues to work without modification
Enhanced Usage Examples:
// Set global padding configuration once for entire app
AdaptiveDialogManager.instance.setGlobalPaddingConfig(
GlobalDialogPaddingConfig.spacious()
);
// All subsequent dialogs automatically use global padding
await dialogManager.showAlert(
context: context,
title: 'Alert',
content: 'This uses global spacious padding automatically',
);
// Individual dialogs can still override global settings
await dialogManager.showDialog(
context: context,
DialogConfig(
title: 'Custom Dialog',
content: 'This uses custom padding',
padding: EdgeInsets.all(12.0), // Overrides global setting
titlePadding: EdgeInsets.all(8.0), // Overrides global setting
),
);
// Predefined configurations for common use cases
AdaptiveDialogManager.instance.setGlobalPaddingConfig(
GlobalDialogPaddingConfig.compact() // Mobile-optimized
);
AdaptiveDialogManager.instance.setGlobalPaddingConfig(
GlobalDialogPaddingConfig.minimal() // Space-constrained
);
// Custom global configuration
AdaptiveDialogManager.instance.setGlobalPaddingConfig(
GlobalDialogPaddingConfig(
dialogPadding: EdgeInsets.all(20.0),
titlePadding: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 0.0),
contentPadding: EdgeInsets.all(16.0),
actionsPadding: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0),
buttonPadding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
iconPadding: EdgeInsets.only(bottom: 16.0),
insetPadding: EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),
),
);
// Reset to default configuration
AdaptiveDialogManager.instance.resetGlobalPaddingConfig();
Key Benefits:
Added missing titlePadding parameter to DialogConfig for complete title spacing control
titlePadding parameter to DialogConfig for complete title spacing controltoMap() and fromMap() methodsAlertDialog.titlePadding propertyComprehensive Zero Padding Defaults
padding (content padding) default from EdgeInsets.fromLTRB(24, 20, 24, 24) to EdgeInsets.zerotitlePadding default from nullable to EdgeInsets.zeroactionsPadding default from nullable to EdgeInsets.zerobuttonPadding default from nullable to EdgeInsets.zeroiconPadding default from EdgeInsets.only(bottom: 16) fallback to EdgeInsets.zeroinsetPadding default from nullable to EdgeInsets.zeroProperty Type Safety Improvements
EdgeInsetsGeometry? to non-nullable EdgeInsetsGeometryPredictable Dialog Layouts
Improved Example Application
This version introduces behavioral changes in dialog appearance:
If you want the old padding behavior:
// Before (old defaults were automatic)
DialogConfig(
title: 'My Dialog',
content: 'Content',
)
// After (add padding explicitly for old appearance)
DialogConfig(
title: 'My Dialog',
content: 'Content',
padding: EdgeInsets.fromLTRB(24, 20, 24, 24), // Old content padding
titlePadding: EdgeInsets.fromLTRB(24, 24, 24, 0), // Optional title padding
actionsPadding: EdgeInsets.fromLTRB(8, 0, 8, 8), // Optional actions padding
)
If you prefer the new zero-padding approach:
// New default - zero padding everywhere
DialogConfig(
title: 'My Dialog',
content: 'Content',
// No padding = EdgeInsets.zero for all padding properties
)
// Add custom padding only where needed
DialogConfig(
title: 'My Dialog',
content: 'Content',
padding: EdgeInsets.all(16), // Custom content padding
titlePadding: EdgeInsets.only(bottom: 8), // Custom title spacing
)
DialogConfig constructors continue to workcopyWith() and serialization methods fully preserve existing behaviorNo breaking changes to existing functionality
_buildCupertinoActions() method in AdaptiveDialogManageractions parameter or passing an empty listNo breaking changes to existing functionality
SnackbarConfig.fromMap() methodNo breaking changes to public interfaces
Removed Generic Types from Snackbar and Toast Systems
SnackbarResult classToastResult classSnackbarManager interface by removing all generic type parametersToastManager interface by removing all generic type parametersAdaptiveSnackbarManager to use non-generic types throughoutAdaptiveToastManager to use non-generic types throughoutSnackbarQueueManager to use non-generic types throughoutToastQueueManager to use non-generic types throughoutEnhanced Type Safety Through Simplification
T type parameters with Object? for data storageSimplified API Design
Object? typeBetter Error Handling
SnackbarQueueManager Enhancements
_completeWithDismissedResult() helper method for consistent result completion_completeWithCancelledResult() helper method for error handlingToastQueueManager Enhancements
_completeWithDismissedResult() helper method for consistent result completion_completeWithCancelledResult() helper method for error handlingSnackbarResult Updates
SnackbarResult<T> to SnackbarResultdata property from T? to Object?ToastResult Updates
ToastResult<T> to ToastResultdata property from T? to Object?SnackbarManager Interface
Future<SnackbarResult?>ToastManager Interface
Future<ToastResult?>Object? for data storage across all systemsType Safety Approach
Object? as the universal data type for maximum flexibility(result.data as String?)Migration Strategy
This is a patch version update with full backward compatibility:
// Before (still works)
final SnackbarResult<String>? result = await AdaptiveSnackbarManager.instance.showInfo(
context: context,
message: 'Hello World',
);
// After (simplified)
final SnackbarResult? result = await AdaptiveSnackbarManager.instance.showInfo(
context: context,
message: 'Hello World',
);
// Data casting when needed
if (result?.data != null) {
final String? message = result!.data as String?;
}
No breaking changes to existing functionality
Simplified Generic Type Parameters in Snackbar System
dismissSnackbar() method in SnackbarQueueManager_replaceSnackbar() method in SnackbarQueueManagerAdaptiveSnackbarManagerType Safety Improvements
Object? instead of generic T? where appropriateNew Login Example Page
Improved Navigation
Object? vs generic typesThis is a patch version update with full backward compatibility:
No breaking changes to existing dialog, snackbar, or toast functionality
Comprehensive Debug Mode Support
enableDebugMode() method to DialogManager interface for detailed dialog loggingdisableDebugMode() method to DialogManager interface for turning off debug outputenableDebugMode() method to SnackbarManager interface for detailed snackbar loggingdisableDebugMode() method to SnackbarManager interface for turning off debug outputAdaptiveDialogManager with comprehensive loggingAdaptiveSnackbarManager with comprehensive loggingDeveloper Experience Improvements
AdaptiveToastManagerDialogManager interface with debug mode methods for complete API consistencySnackbarManager interface with debug mode methods matching other manager interfacesAdaptiveDialogManager Debug Support
enableDebugMode() implementation with debug state managementdisableDebugMode() implementation with proper cleanup_logDebug() method integration for consistent loggingAdaptiveSnackbarManager Debug Support
enableDebugMode() implementation with debug state managementdisableDebugMode() implementation with proper cleanup_logDebug() method integration for consistent loggingAdaptiveDialogManager, AdaptiveSnackbarManager, AdaptiveToastManager) now have identical debug mode APIs// Enable debug mode for detailed logging
AdaptiveDialogManager.instance.enableDebugMode();
AdaptiveSnackbarManager.instance.enableDebugMode();
AdaptiveToastManager.instance.enableDebugMode(); // Already available
// Disable debug mode
AdaptiveDialogManager.instance.disableDebugMode();
AdaptiveSnackbarManager.instance.disableDebugMode();
AdaptiveToastManager.instance.disableDebugMode(); // Already available
This is a patch version update with full backward compatibility:
No breaking changes to existing toast, dialog, or snackbar functionality
Fixed Custom Content Toast Dismissal Issue
ToastQueueManager and AdaptiveToast widget that prevented proper communicationFixed dismissToastsByTag Method
dismissToastsByTag() implementation in AdaptiveToastManager that was dismissing ALL active toasts instead of only toasts with matching tags_dismissToastsByType, _dismissToastsByTag) public in ToastQueueManager for proper accessEnhanced Toast State Communication
AdaptiveToast widget to properly receive dismissal signals from queue managerAdded Context Consistency Testing
BuildContext is used (State vs Builder context)Fixed Context-Related Positioning Issues
Improved Debug Information
Enhanced Example Application
toastId parameter to constructor for proper ID synchronizationtoastId parameterToastQueueManager API Enhancement
dismissToastsByType() and dismissToastsByTag() methods public for external accessAdaptiveToastManager Fixes
dismissToastsByType() and dismissToastsByTag() methodstoastId parameter is optional and defaults to auto-generationThis patch release resolves several critical issues that were affecting toast functionality:
All fixes maintain full backward compatibility while significantly improving the reliability and user experience of the toast system.
No Breaking Changes: All existing code continues to work without modification
Toast Timing Behavior Control
ToastTimingBehavior enum with independent and dependent optionsToast Display Mode Enhancement
ToastDisplayMode enum with stack and column optionsToastConfig with displayMode parameter for explicit controlToastLayout enumToast Timing Manager
ToastTimingManager class for sophisticated timing controlEnhanced Toast Configuration
timingBehavior parameter in ToastConfig with dependent timing as defaultinfo, success, warning, error) with timing behavior supportcopyWith method to include all new timing-related propertiesUtility Enhancements
IdGenerator class for generating unique toast and dialog IDsAdvanced Dismissible Configuration
dismissible property with smart auto-dismiss logicautoDismiss property for granular control over automatic dismissaldismissDirection property for customizing swipe-to-dismiss behaviorshouldAutoDismiss getter for intelligent dismissal logic based on snackbar typeAnimation System Improvements
animationDuration property for custom animation timinganimationCurve property for custom animation curvesFactory Constructor Enhancements
SnackbarConfig.action() to support duration parameterSnackbarConfig.banner() to support duration parameterSnackbarConfig.custom() to support duration and dismissible parametersSnackbarConfig.loading() to support dismissible parameterEnhanced Debug Information
Improved Example Application
Enhanced Toast Constants
maxVisibleColumnToasts from 3 to 4 for improved user experienceToast Configuration Updates
timingBehavior set to dependent for better multi-toast experienceeffectiveDuration calculation with timing behavior considerationshouldAutoDismiss logic with timing behavior awarenessWidget Lifecycle Management
AdaptiveToast widget with timing manager integrationToastConfig Model Updates
timingBehavior property with comprehensive factory constructor supportdisplayMode property for explicit display controltoMap() and fromMap() methods with new propertiescopyWith() method for complete configuration copyingSnackbarConfig Model Updates
Type Safety Improvements
Configuration Consistency
fromMap() factory constructorscopyWith() method completeness across all modelsEnhanced API Documentation
Example Application Updates
Enhanced Debug Capabilities
Example Application Testing
Timing System Optimization
Animation Performance
This is a minor version update with full backward compatibility:
Optional Migration for Enhanced Features:
// Before (still works)
ToastConfig.info(
platformType: PlatformType.android,
message: 'Info message',
);
// After (enhanced with timing behavior)
ToastConfig.info(
platformType: PlatformType.android,
message: 'Info message',
timingBehavior: ToastTimingBehavior.independent, // Optional
);
Fix snackbar top position with safe area
No breaking changes to existing APIs or method signatures
Default Position Changed from Bottom to Top
SnackbarManager.showToast() default position from center to topSnackbarManager.showCustom() default position from bottom to topSnackbarConfig constructor default position from bottom to topSnackbarConfig.fromMap() fallback default from bottom to topSnackbarConfig.custom() factory method default from bottom to topAdaptiveSnackbarManager.showCustom() default parameter from bottom to topDocumentation Updates
SnackbarPosition enum documentation to mark top as "(default)"bottom position in enum documentationBackward Compatibility Maintained
Improved User Experience
SnackbarPosition value as neededNo migration required. This change only affects the default behavior:
showSnackbar(context, config) → showed at bottomshowSnackbar(context, config) → shows at topshowSnackbar(context, config.copyWith(position: SnackbarPosition.bottom)) → shows at bottomAdded dismissible property to SnackbarConfig for controlling user dismissal behavior
New Dismissible Properties
dismissible property to SnackbarConfig for controlling user dismissal behaviorautoDismiss property to control automatic dismissal after durationdismissDirection property to customize swipe-to-dismiss directionshouldAutoDismiss getter method for intelligent auto-dismiss logicAnimation Configuration
animationDuration property to SnackbarConfig for custom animation timinganimationCurve property to SnackbarConfig for custom animation curvesFactory Constructor Enhancements
SnackbarConfig.action() to support duration parameterSnackbarConfig.banner() to support duration parameterSnackbarConfig.custom() to support duration and dismissible parametersSnackbarConfig.loading() to support dismissible parameterLinter Error Resolution
dismissible property error in AdaptiveSnackbarManagerautoDismiss property error in AdaptiveSnackbarManagerdismissDirection property error in AdaptiveSnackbarManageranimationDuration property error in AdaptiveSnackbarManageranimationCurve property error in AdaptiveSnackbarManagerConfiguration Consistency
toMap() methodfromMap() factory constructor to handle new propertiescopyWith() method to include all new propertiesSmart Auto-Dismiss Logic
shouldAutoDismiss getter now prevents auto-dismissal for persistent snackbarstrue only if autoDismiss is true AND snackbar type is NOT persistentType Safety Improvements
Enhanced Configuration Examples
API Reference Updates
New ToastLayout.column option for vertical toast arrangement
Column Layout Mode for Toasts
ToastLayout.column option for vertical toast arrangementEnhanced Toast Configuration
ToastConfig with layout parameter for choosing between stack and column modesToastLayout enum with stack (default) and column optionsImproved Toast Widgets
ToastColumnOverlay widget for column-based toast displayDeveloper Experience Improvements
layout: ToastLayout.column in ToastConfigArchitecture Simplification
ValueKey<String> identificationPerformance Optimizations
List.take() for maximum visible countToastConstants.maxVisibleColumnToasts updated from 3 to 4 for better UXToastColumnOverlay (renamed from SimpleColumnOverlay) for consistencyToastLayout enum and related classesComprehensive adaptive dialog management for all Flutter platforms (Android, iOS, Web, Windows, macOS, Linux, Fuchsia)
Multi-Platform Dialog System
AdaptiveDialogManager) for efficient resource managementAdvanced Snackbar System
AdaptiveSnackbarManager) with platform-specific behaviorsToast Notification System
AdaptiveToastManager) with cross-platform supportRich Animation System
Comprehensive Configuration Models
DialogConfig model extending BaseDataModel from flutter_shared_utilitiesSnackbarConfig with comprehensive customization optionsToastConfig for flexible toast configurationDialogResult<T>, SnackbarResult<T>, and ToastResult<T> with type safetyPlatformSettings for platform-specific configurationsResponsiveConfig for breakpoint-aware layoutsAdvanced Enums
DialogType - 25+ dialog variants for comprehensive coverageSnackbarType - 10 snackbar types with different behaviors and prioritiesToastType - 5 toast variants with customizable stylingPlatformType - Support for Android, iOS, web, windows, macOS, linux, fuchsiaAnimationType - 16 different animation options with performance considerationsSnackbarPosition - Comprehensive positioning with top, bottom, center, topLeft, topRight, bottomLeft, bottomRight, centerLeft, centerRight optionsSnackbarBehavior - Fixed, floating, pinned, overlay, modal behaviorsToastPosition - Flexible toast positioning optionsToastLayout - Stack and queue layout patternsResponsiveBreakpoint - Mobile, tablet, desktop, large breakpointsUtility Classes
PlatformDetector for automatic platform detection with override capabilitiesResponsiveManager for breakpoint management and responsive layoutsSettingsController for managing dialog and notification preferencesAdvanced Widget Components
AdaptiveSnackbar - Platform-specific snackbar implementationAdaptiveToast - Cross-platform toast widgetSnackbarOverlay and ToastOverlay - Advanced overlay managementColorPicker, ColorGrid, FilePickerContent, GenericSearchDelegateSettingsContent and HelpPage - Pre-built configuration pagesQueue Management System
DialogQueueManager - Intelligent queue management for dialogsSnackbarQueueManager - Priority-based snackbar queue handlingToastQueueManager - Stack and queue-based toast managementToastTimingManager - Advanced timing control for toast notificationsAccessibility Features
Developer Experience
DialogManager, SnackbarManager, ToastManager) for dependency injectionDependencies
flutter_shared_utilities: ^1.0.6 for base models and safe type utilitiesuniversal_io: ^2.2.2 for cross-platform I/O operationsExample Application
Documentation
Minimum Requirements
Architecture
Performance
Type Safety
BaseDataModel with safe type conversionYour coding agent can read these notes before it upgrades. Set up the MCP server →