Skip to content
CAI
Software that uses CAICheck a score

fluttercandies/flutter_smart_dialog

64.0

Adequate · 19 September 2026

70.8k

lines of production code

JavaScript

with Dart

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Flutter library for managing overlay UI components, including dialogs, toasts, loading indicators, and notifications. It provides a centralized API to display, position, and control these overlays with support for custom animations, attachment to specific widgets or pages, and robust lifecycle management during navigation. The library ensures stable behavior through queue-based toast handling, debouncing, and dedicated back-event interception.

How it got here

2020 — SmartDialog 4.0 major overhaul

13 changes.

This period focused on the major release of SmartDialog 4.0, featuring a complete API restructuring, null-safety adaptation, and a new initialization model replacing the previous singleton approach. The work included significant internal refactoring of dialog rendering and animation lifecycles, alongside comprehensive regression testing to ensure stability. Additionally, the project updated its SDK requirements and scaffolded a new example application to demonstrate the revamped features.

2021 — Desktop platform expansion and API modernization

9 changes.

The project expanded its example application to support Linux, Windows, and macOS desktop platforms, while updating web and macOS configurations for Flutter 3 compatibility. Internally, the library underwent a significant refactoring of dialog lifecycle management and introduced a highly customizable animation system with new features for widget binding and state control.

2022–2026 — Architecture refactoring and feature expansion

12 changes.

The project underwent a significant architectural overhaul, replacing the unified configuration model with distinct classes for each dialog type and migrating UI dependencies to standalone packages. This period also introduced a comprehensive suite of new features, including standalone animation widgets, a robust queue-based toast system, and back-event interception logic. Supporting infrastructure was strengthened with expanded demo cases, internal utility classes, and automated code coverage validation tools.

Features

Add default UI components for notifications and loading states

This change introduces a set of new default widget implementations for the library's UI layer, specifically for loading indicators, toasts, and various notification types (success, error, warning, failure, and alter). These components, located in lib/src/widget/default, provide the visual styling and structure for user feedback messages and loading states, utilizing the material\_ui package for icons and ThemeStyle for consistent coloring and theming.

lib/src/widget/default · high confidence

Add example app demonstrating SmartDialog usage

The example application now includes a main entry point that initializes FlutterSmartDialog and provides a demo page with buttons to showcase various dialog features, including toast messages, loading indicators, notifications, custom dialogs, attached dialogs, and page binding.

example/lib · high confidence

Add iOS example app scaffolding

The iOS example application scaffold is now included, providing the necessary project files to build and run the app on iOS devices. This includes the main application entry point (AppDelegate), standard launch and main storyboards, app icon and launch image asset catalogs, and the Info.plist configuration with standard Flutter settings.

example/ios/Runner · high confidence

Added Flutter example application scaffold

The repository now includes a new example directory containing a standard Flutter application structure. This addition provides users with a ready-to-run starting point that includes configuration for static analysis (via \analysis\_options.yaml\), version control exclusions (\.gitignore\), and project metadata, facilitating easier onboarding and demonstration of the library's usage.

example · high confidence

Added Linux desktop support to the example app

The example application now includes a complete Linux desktop implementation, enabling users to run and test the library on Linux. This change adds the necessary CMake build configuration, GTK-based native entry points, and Flutter plugin registration infrastructure required to build and launch the app on the Linux platform.

example/linux · high confidence

Added Windows desktop runner for the example app

The example application now includes a native Windows build target. This change adds the necessary CMake configuration, Visual Studio project files, and C++ runner code (including window management, DPI awareness, and the Flutter engine integration) required to compile and run the Flutter example on Windows.

example/windows · high confidence

Added coverage validation tool

A new Dart script, tool/check\_coverage.dart, has been added to enforce code coverage requirements. This tool parses LCOV coverage files to calculate the percentage of hit lines against a specified minimum threshold, exiting with an error code if the coverage falls below the required level, thereby hardening release gates.

tool · high confidence

Added iOS example app project configuration

The iOS example application's Xcode project structure has been added, including the main project file, workspace settings, and build scheme. This enables developers to open, build, and run the iOS example app directly in Xcode.

example/ios/Runner.xcodeproj · high confidence

Added iOS example project scaffolding and configuration

The iOS example project now includes the necessary configuration files to build and run on iOS. This adds the AppFrameworkInfo.plist (setting the minimum OS version to 12.0), Debug and Release xcconfig files for build settings, and an LLDB helper script to improve debugging support. Additionally, the Xcode workspace is configured to include both the main Runner project and the CocoaPods dependencies, with workspace checks and preview settings explicitly defined.

example/ios/Flutter · high confidence

Android example project scaffolded for Flutter 2 embedding

The Android side of the example app has been initialized with the Flutter V2 embedding, enabling modern Android integration features. This includes a new MainActivity extending FlutterActivity, AndroidManifest.xml configured with flutterEmbedding=2 and internet permissions for debugging, and standard Gradle wrapper setup (Gradle 8.12). Users running the example on Android will now benefit from the updated embedding architecture, including proper theme handling for light/dark modes and support for text-processing intents.

example/android · high confidence

Expanded demo suite for SmartDialog edge cases and features

The example application now includes a comprehensive set of new demo files (issue165, 181, 183, 188, 190, 191, 200, 205, 209, 235, 251, 266, 274) that illustrate specific usage patterns and edge cases for the SmartDialog library. These demos cover custom animation builders, navigation interactions, loading and toast states, dark mode compatibility, tag-based management, and nested scroll solutions, providing users with concrete code examples for complex scenarios.

example/lib/demo · high confidence

Introduce highly customizable animation system and new dialog features

This update adds a new \animationBuilder\ API that allows users to define completely custom dialog animations using \AnimationController\ and \AnimationParam\, replacing the previous fixed animation types. It also introduces several new capabilities: the \bindPage\ and \bindWidget\ features to attach dialogs to specific pages or widgets, the \useSystem\ flag to leverage native system dialogs, and the \showAttach\ feature for positioning dialogs relative to a target widget. Additionally, it adds \keepSingle\ and \tag\ support for managing dialog instances, \permanent\ mode for non-dismissable dialogs, and \onBack\ callbacks for handling back navigation.

lib/src/data · high confidence

New standalone animation widget components

The library now provides a set of dedicated, reusable animation widgets in the \lib/src/widget/animation\ directory, including \FadeAnimation\, \HighlightMaskAnimation\, \MaskAnimation\, \ScaleAnimation\, \SizeAnimation\, and \SlideAnimation\. These components encapsulate standard Flutter transitions (such as \FadeTransition\, \ScaleTransition\, \SizeTransition\, and \SlideTransition\) and expose them via simple APIs that accept an \AnimationController\ and a child widget, allowing users to easily apply consistent animation effects to UI elements without managing the underlying transition logic manually.

lib/src/widget/animation · high confidence

Behavioural changes

Added empty Flutter plugin registrant files for Linux and Windows

New generated stub files for plugin registration have been added to the Linux and Windows build configurations. These files (including the C/C++ registrant sources, headers, and CMake scripts) currently define empty plugin lists, meaning no Flutter plugins are registered on these platforms until the generator is run with actual plugin dependencies.

linux, windows · high confidence

Added macOS Flutter build configuration and workspace files

The example project now includes the necessary configuration files to support building the macOS target. This adds \Flutter-Debug.xcconfig\ and \Flutter-Release.xcconfig\ to include generated build settings, a \GeneratedPluginRegistrant.swift\ file to handle plugin registration (currently empty), and the \Runner.xcworkspace\ structure to organize the Xcode project. These changes enable the macOS platform to be built and run within the Flutter example application.

example/macos/Flutter · high confidence

Introduction of internal utility and configuration support classes

The library adds several new internal helper classes to support dialog management and UI rendering. DebounceUtils introduces a mechanism to throttle dialog actions (custom, attach, notify, toast, mask) based on configurable debounce times, with a default 500ms limit for mask dialogs. DialogKit provides a centralized way to check for the existence of specific dialog types by tag or type. ViewUtils adds utilities for safe frame scheduling, dark mode detection, and overlay entry insertion, while also defining default theme colors (background and text) that adapt to the current brightness. Additionally, new typedefs define callback signatures for back handling and builders for positioning/adjusting attach dialogs, and a SmartLog class is added for debug-mode logging.

lib/src/kit · high confidence

Migrate to standalone Flutter UI packages and introduce new helper widgets

The library has migrated its UI dependencies to standalone Flutter packages (importing from 'material\_ui' instead of the bundled Flutter SDK). This change introduces several new helper components in the widget helper layer: AttachWidget for positioning UI elements relative to a target, DialogAnimationLifecycle for managing dialog animation controllers, DialogScope for managing dialog state and lifecycle, MaskEvent for handling mask touch interactions, SmartOverlayEntry for safer overlay management, and ToastHelper to adjust toast positioning when the keyboard appears.

lib/src/widget/helper · high confidence

New back-event interception logic for dialogs, toasts, and loading states

The library now includes a dedicated back-event handling mechanism (MonitorPopRoute) that intercepts system back presses. When a back event occurs, the library checks for active loading, notification, or dialog overlays and dismisses them based on their configured back behavior (normal or block) before allowing the route to pop. This ensures that user interactions with SmartDialog components are properly managed during navigation back actions.

_lib/src/helper/pop\monitor · high confidence

Rebuilt custom dialog, loading, and notify components with new parameter handling and debouncing

The custom dialog, loading, and notify implementations in lib/src/custom have been rewritten to support new configuration options and improved state management. Users can now control rapid repeated calls via a new 'debounce' parameter (replacing the previous 'antiShake' naming), and the 'keepSingle' feature has been optimized to better manage dialog reuse. The loading dialog now enforces a 'leastLoadingTime' to prevent flickering, and the notify system supports closing dialogs with duplicate tags more reliably. Additionally, the 'showAttach' method now accepts 'highlightBuilder' and 'scalePointBuilder' for enhanced visual targeting, and the 'ignoreArea' parameter allows users to define regions where mask clicks are ignored.

lib/src/custom · high confidence

Refactored dialog lifecycle management and route integration

The internal dialog management logic has been restructured into dedicated helper classes: DialogProxy now centralizes the creation and dismissal of dialogs, toasts, and notifications; RouteRecord and SmartNavigatorObserver handle route stack tracking and automatically dismiss page-bound dialogs when routes are popped or replaced; and MonitorWidgetHelper ensures attached dialogs are hidden when their bound widgets are unmounted or move off-screen. This change improves the reliability of dialog state during navigation and widget lifecycle events.

lib/src/helper · high confidence

Refactored dialog rendering with new widget hierarchy and animation lifecycle

The internal dialog rendering logic has been restructured to improve animation handling and extensibility. The legacy \SmartDialogView\ widget has been removed and replaced by two new components: \SmartDialogWidget\ for standard dialogs and \AttachDialogWidget\ for anchored/attached dialogs. These new widgets utilize a dedicated \DialogAnimationLifecycle\ to manage animation states, supporting custom \AnimationBuilder\ callbacks, specific \SmartAnimationType\ selections (fade, scale, slide), and granular control over mask interactions via \SmartMaskTriggerType\ and \maskIgnoreArea\. This change also introduces support for highlight masks and non-animation types, providing a more robust foundation for dialog presentations.

lib/src/widget · high confidence

Refactored global configuration API and introduced new dialog control enums

The global configuration structure has been reorganized into distinct classes for each dialog type (custom, attach, loading, notify, toast), replacing the previous unified config model. This change introduces several new configuration options: a \leastLoadingTime\ property for loading dialogs to enforce a minimum display duration, a \displayType\ enum for toasts that supports an \onlyRefresh\ mode to update content without reopening, and an \intervalTime\ for spacing between sequential toasts. Additionally, the configuration now exposes new enums to control behavior more precisely, including \SmartAwaitOverType\ to define when await callbacks resolve, \SmartMaskTriggerType\ to specify mask click timing, \SmartNonAnimationType\ to selectively disable animations for specific events, and \SmartAttachAlignmentType\ to fine-tune attach dialog positioning. The \AlignmentGeometry\ type used for alignment has also been updated to \Alignment\.

lib/src/config · high confidence

Release 5.3.0 with breaking API changes and stability fixes

This release introduces several breaking changes: the deprecated \backDismiss\ parameters and \SmartConfigCustom\/\SmartConfigAttach.backDismiss\ are removed (use \backType: SmartBackType.normal\ or \SmartBackType.block\ instead), the deprecated \showAttach.replaceBuilder\ parameter is removed (use \adjustBuilder\ with \AttachAdjustParam\), and \SmartConfig.checkExist()\ is moved to \SmartDialog.checkExist()\. Additionally, the \flutter\_boost\ back-interception logic is migrated to use \PopEntry\ instead of Flutter's deprecated scoped callback. On the stability front, the changelog notes fixes for rapid toast updates (unifying timer and overlay ownership to prevent stale dismissals), hardening of toast layout measurements during page transitions, and improved handling of \showAttach\/\bindWidget\ lifecycle geometry checks to avoid render object errors. The entry also includes deterministic regression coverage for dialog, loading, notify, route, attach, and toast display modes.

(repo-wide) · high confidence

Replaced legacy toast implementation with a new queue-based system

The toast display logic has been completely rewritten to use a dedicated queue and state management system. This change introduces support for multiple concurrent toast types (normal, last, onlyRefresh, and multi) and ensures deterministic lifecycle management, which resolves previous issues with memory leaks and crashes. Users will experience more reliable toast behavior, including proper handling of rapid successive toasts and mask dismissal interactions.

lib/src/custom/toast · high confidence

Restructured public API exports and added SmartDialogController

The library's public interface has been reorganized to improve clarity and accessibility. The main entry point now explicitly exports configuration modules (enum, attach, custom, loading, notify, and toast configs) and data models (AnimationParam, AttachModel, NotifyStyle). The previous direct export of 'src/dialog.dart' has been replaced by 'src/init\_dialog.dart', and a new 'SmartDialogController' is now exported from 'src/widget/helper/dialog\_scope.dart', allowing users to programmatically control dialog instances.

lib · high confidence

SmartDialog 4.0: Major API overhaul and new initialization model

This release introduces SmartDialog 4.0, featuring a complete restructuring of the public API and initialization process. The library now uses a \FlutterSmartDialog\ widget with a static \init()\ method for setup, replacing the previous singleton-based approach. This change brings significant behavioral updates, including the renaming of \antiShake\ to \debounce\, the removal of the \target\ parameter from \showAttach\, and the migration of \AlignmentGeometry\ to \Alignment\. New capabilities include \highlight\ features, \ignoreArea\ for avoiding navigation bars, \bindWidget\ for page-specific dialogs, and highly customizable animations via \animationBuilder\. The internal architecture has been refactored to support these features, with deprecated APIs removed and null-safety fully adapted.

lib/src · high confidence

Updated macOS Flutter build configuration to version 5.0.1

The macOS platform files have been regenerated to reflect a build name and number of 5.0.1. This update includes new generated configuration files (Flutter-Generated.xcconfig and flutter\_export\_environment.sh) and an empty plugin registrant, indicating a synchronization with the current Flutter SDK state and application versioning.

macos · medium confidence

Updated macOS Runner template for Flutter 3

The macOS example application's native project files have been regenerated to align with the Flutter 3 tooling. This update includes a modernized AppDelegate that explicitly handles window closure behavior, a new MainFlutterWindow implementation using the FlutterViewController API, and updated build configurations (xcconfig) and entitlements to support the current Flutter macOS plugin structure.

example/macos/Runner · high confidence

Updated macOS example project to support Flutter 3 and Xcode 15

The macOS example application's Xcode project configuration has been updated to align with Flutter 3 and modern Xcode standards. The project file now targets Xcode 15.1 (indicated by \LastUpgradeCheck = 1510\ and \LastSwiftUpdateCheck = 0920\) and includes necessary build phases and file references for the Flutter engine integration, such as the \Flutter Assemble\ aggregate target and updated Swift source files. This ensures the example app builds correctly with the latest Flutter tooling and Xcode versions.

example/macos/Runner.xcodeproj · high confidence

Updated web entry point and manifest for Flutter 3 compatibility

The example web application now uses a new index.html and manifest.json structure aligned with Flutter 3 standards. The HTML entry point includes a dynamic base href placeholder for correct asset serving and loads the flutter\_bootstrap.js script, while the manifest.json defines the app as a standalone PWA with updated icon assets and theme colors.

example/web · high confidence

Test coverage

Added placeholder unit test files for iOS and macOS runners; Added regression test suite for dialog behavior and lifecycle; Added widget test for the standalone Flutter UI example.

Dependencies

Upgrade to Flutter 3.44+ and Dart 3.12+ with new UI dependencies

The package now requires Flutter 3.44.0 or higher and Dart 3.12.0 or higher, dropping support for older SDK versions. To support the new UI capabilities, two new dependencies have been added: \material\_ui\ (^1.0.1) and \cupertino\_ui\ (^1.0.0). The \pubspec.lock\ file has been removed, and the example app has been updated to use the new Gradle Kotlin DSL and Flutter plugin loader.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 64.

Lenses

  • Code Health 95
  • Architecture 74
  • Maturity 52
  • Readiness 62
  • Security 100
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 271 feature/other, 29 fixes

By area

  • lib/src — 119 commits
  • (root) — 96 commits
  • (repo) — 25 commits
  • .github/ISSUE_TEMPLATE — 15 commits
  • example/lib — 13 commits
  • example/android — 6 commits
  • .github/workflows — 5 commits
  • example/ios — 4 commits
  • example/macos — 4 commits
  • docs/web — 2 commits
  • example/pubspec.yaml — 2 commits
  • example/windows — 2 commits
  • docs/3.x migrate 4.0.md — 1 commit
  • docs/Attach Chapter.md — 1 commit
  • docs/Dialog Chapter.md — 1 commit
  • docs/codex_with_cc — 1 commit
  • lib/flutter_smart_dialog.dart — 1 commit
  • linux/flutter — 1 commit
  • macos/Flutter — 1 commit

Notable commits

  • fix: :bug: Fix default dismiss error when show<T> and showAttach<T> specifies a non-null generic
  • fix: Fix #105
  • fix: Fix #77
  • fix: Fix: Error when analyzing code
  • fix: Merge pull request #106 from moxiaov587/fix-default-dismiss-error
  • fix: Merge pull request #272 from zeqinjie/fix-Memory-leak
  • fix: Merge pull request #290 from bggRGjQaUbCoE/fix-toast-padding
  • fix: bugfix #78
  • fix: fix #34 #41
  • fix: fix #42
  • fix: fix #56
  • fix: fix #81
  • fix: fix CurvedAnimation & overlayEntry memory leak
  • fix: fix #53, fix back event cannot close loading
  • fix: fix android install
  • fix: fix bug
  • fix: fix bug about permanent dialog
  • fix: fix clickMaskDismiss
  • fix: fix insert exception
  • fix: fix maskClose_nonAnimation
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

fluttercandies/flutter_smart_dialog was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit eab71ac54f664df44befa98a38b54d630f9a830f — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.