NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Comprehensive custom lint rules for Dart and Flutter.
Last release 9 months ago
24 Dec 2025
Too new to tell
only 1 release windows
Nearly every release is documented
notes for 4 of 4 stable releases
Nothing withdrawn
no release was ever pulled
9 months old
4 releases · first in 2025
One column per month.
chore: bump version to 2.2.0
chore: bump version to 2.2.0
== null or != null)dispose_fields test casesRules are now disabled by default (opt-in model)
Rules are now disabled by default (opt-in model)
Previous versions (v2.0.0 and earlier) enabled all 128 rules automatically.
Starting with v2.1.0, rules must be explicitly enabled or configured via presets.
Migration Required:
To maintain v2.0.0 behavior (all rules enabled):
# analysis_options.yaml
include: package:awesome_lints/presets/strict.yamlTo adopt the recommended preset (recommended for most projects):
# analysis_options.yaml
include: package:awesome_lints/presets/recommended.yamlFor gradual adoption (core essential rules only):
# analysis_options.yaml
include: package:awesome_lints/presets/core.yamlSee Migration Guide for detailed instructions.
New Preset Configurations:
core.yaml - Essential rules only (~15 rules)
recommended.yaml - Balanced rule set (~40 rules)
strict.yaml - All rules enabled (128 rules)
Category-specific presets:
flutter.yaml - All 32 Flutter rulescommon.yaml - All 65 common Dart rulesprovider.yaml - All 8 Provider rulesbloc.yaml - All 22 Bloc rulesfake_async.yaml - All FakeAsync rulesBefore (v2.0.0):
# All rules enabled by default
custom_lint:
rules:
- avoid_non_null_assertion: false # Must disable unwanted
- no_magic_number: false # Must disable unwantedAfter (v2.1.0):
# Use preset or enable specific rules
include: package:awesome_lints/presets/recommended.yaml
# Or enable specific rules only
custom_lint:
enable_all_lint_rules: false
rules:
- avoid_late_context
- prefer_early_returnMajor Release - Framework-Specific Lints
🎉 Major expansion with 42 new lint rules across three new categories: Bloc, Provider, and FakeAsync, plus 11 new common lint rules!
Bloc Lints (22 rules)
Framework-specific lints for the Bloc state management library:
avoid-bloc-public-fields - Warns when a Bloc or Cubit has public fieldsavoid-bloc-public-methods - Warns when a Bloc has public methods except overridden onesavoid-cubits - Warns when a Cubit is usedavoid-duplicate-bloc-event-handlers - Detects multiple handlers for the same eventavoid-empty-build-when - Requires buildWhen condition in BlocBuilder/BlocConsumeravoid-existing-instances-in-bloc-provider - Prevents reusing instances in BlocProvideravoid-instantiating-in-bloc-value-provider - Prevents new instances in BlocProvider.valueavoid-passing-bloc-to-bloc - Prevents Bloc dependencies on other Blocsavoid-passing-build-context-to-blocs - Prevents BuildContext in Bloc events/methodsavoid-returning-value-from-cubit-methods - Ensures Cubits communicate via statecheck-is-not-closed-after-async-gap - Requires isClosed checks in async handlersemit-new-bloc-state-instances - Prevents emitting existing state instanceshandle-bloc-event-subclasses - Ensures all event subclasses are handledprefer-bloc-event-suffix - Enforces "Event" suffix for event classesprefer-bloc-extensions - Suggests context.read()/watch() over BlocProvider.of()prefer-bloc-state-suffix - Enforces "State" suffix for state classesprefer-correct-bloc-provider - Ensures BlocProvider is used for Blocsprefer-immutable-bloc-events - Requires @immutable on Bloc eventsprefer-immutable-bloc-state - Requires @immutable on Bloc stateprefer-multi-bloc-provider - Suggests MultiBlocProvider for nested providersprefer-sealed-bloc-events - Requires sealed/final modifiers on event classesprefer-sealed-bloc-state - Requires sealed/final modifiers on state classesProvider Lints (8 rules)
Framework-specific lints for the Provider state management library:
avoid-instantiating-in-value-provider - Prevents new instances in Provider.valueavoid-read-inside-build - Warns about read() usage in build methodsavoid-watch-outside-build - Warns about watch()/select() outside builddispose-providers - Ensures proper disposal of provided resourcesprefer-immutable-selector-value - Requires immutable values in Selectorprefer-multi-provider - Suggests MultiProvider for nested providersprefer-nullable-provider-types - Recommends nullable provider typesprefer-provider-extensions - Suggests context extensions over Provider.of()FakeAsync Lints (1 rule)
Testing-focused lints for the fake_async package:
avoid-async-callback-in-fake-async - Prevents async callbacks in FakeAsyncEnhanced common lints with new best practice rules:
prefer-async-await - Suggests async/await over Future APIprefer-contains - Suggests contains() over indexOf() != -1prefer-correct-for-loop-increment - Validates for-loop increment expressionsprefer-correct-json-casts - Ensures proper JSON type castingprefer-early-return - Recommends early returns to reduce nestingprefer-first - Suggests first over [0] or elementAt(0)prefer-iterable-of - Suggests Iterable.of() over manual iterationprefer-last - Suggests last over [length - 1]prefer-named-boolean-parameters - Requires named parameters for booleansprefer-return-await - Suggests explicit return await in try blocksprefer-switch-expression - Recommends switch expressions over statementsVersion 2.0.0 introduces:
avoid-deprecated-usage - Warns about deprecated API usage
🎉 First stable release of Awesome Lints - a comprehensive collection of custom lint rules for Dart and Flutter applications.
Widget Lifecycle & State Management:
avoid-empty-setstate - Warns when setState is called with an empty callbackavoid-late-context - Prevents context access in late field initializersavoid-mounted-in-setstate - Ensures mounted checks occur before setState callsavoid-stateless-widget-initialized-fields - Warns about non-constant field initialization in StatelessWidgetavoid-unnecessary-overrides-in-state - Detects unnecessary method overrides in State classesavoid-unnecessary-stateful-widgets - Warns when StatefulWidget doesn't use statedispose-fields - Ensures proper disposal of disposable fieldsproper-super-calls - Validates lifecycle method super callsWidget Building & Performance:
avoid-missing-controller - Warns when text fields lack controllers or callbacksavoid-single-child-column-or-row - Detects unnecessary Column/Row with single childavoid-undisposed-instances - Warns about undisposed Disposable instancesavoid-unnecessary-gesture-detector - Suggests lighter alternatives to GestureDetectoravoid-wrapping-in-padding - Prevents unnecessary Padding wrapperspass-existing-future-to-future-builder - Prevents inline future creation in FutureBuilderpass-existing-stream-to-stream-builder - Prevents inline stream creation in StreamBuilderprefer-single-setstate - Recommends consolidating multiple setState callsWidget Optimization:
prefer-align-over-container - Suggests Align instead of Container for alignment-onlyprefer-center-over-align - Suggests Center instead of Align(alignment: Alignment.center)prefer-constrained-box-over-container - Suggests ConstrainedBox for constraints-only scenariosprefer-container - Suggests Container to replace nested containerizable widgetsprefer-padding-over-container - Suggests Padding instead of Container for padding-onlyWidget Best Practices:
prefer-action-button-tooltip - Recommends tooltips for action buttonsprefer-async-callback - Suggests AsyncCallback instead of Future Function()prefer-compute-over-isolate-run - Recommends compute over Isolate.runprefer-dedicated-media-query-methods - Suggests specific MediaQuery methodsprefer-for-loop-in-children - Suggests for-loops over .map().toList() in childrenprefer-sized-box-square - Suggests SizedBox.square() for square boxesprefer-sliver-prefix - Enforces "Sliver" prefix for sliver widgetsprefer-spacing - Suggests spacing parameter over SizedBox (Flutter 3.27+)prefer-text-rich - Suggests Text.rich() over RichTextprefer-void-callback - Suggests VoidCallback over void Function()prefer-widget-private-members - Recommends private members for widget internalsCode Quality & Logic:
arguments-ordering - Enforces named arguments in declaration orderavoid-collapsible-if - Suggests combining nested if statementsavoid-complex-arithmetic-expressions - Warns about overly complex arithmeticavoid-complex-conditions - Warns about complex conditional expressionsavoid-complex-loop-conditions - Warns about complex loop conditionsavoid-contradictory-expressions - Detects logical contradictionsavoid-constant-assert-conditions - Warns about constant assert conditionsavoid-constant-conditions - Warns about constant if/while conditionsavoid-constant-switches - Warns about constant switch expressionsbinary-expression-operand-order - Enforces consistent operand orderingAnti-Patterns & Potential Bugs:
avoid-accessing-collections-by-constant-index - Suggests first/last over [0]/[length-1]avoid-accessing-other-classes-private-members - Prevents accessing private membersavoid-always-null-parameters - Warns about parameters always passed as nullavoid-assigning-to-static-field - Warns about static field mutationavoid-assignments-as-conditions - Prevents assignments in conditionsavoid-async-call-in-sync-function - Warns about unawaited async callsavoid-bitwise-operators-with-booleans - Prevents & and | with booleansavoid-cascade-after-if-null - Warns about cascades after ?.avoid-collection-equality-checks - Warns about == on collectionsavoid-collection-methods-with-unrelated-types - Detects type mismatches in collection methodsavoid-collection-mutating-methods - Warns about mutating immutable collectionsavoid-continue - Suggests alternatives to continue statementsavoid-declaring-call-method - Warns about call method declarationsavoid-non-null-assertion - Warns about ! operator usageType Safety:
avoid-bottom-type-in-patterns - Prevents Never in patternsavoid-bottom-type-in-records - Prevents Never in recordsavoid-casting-to-extension-type - Warns about extension type castsno-object-declaration - Prevents Object type usageCode Duplication & Redundancy:
avoid-adjacent-strings - Warns about adjacent string literalsavoid-conditions-with-boolean-literals - Prevents comparing with true/falseavoid-duplicate-cascades - Detects duplicate cascade operationsavoid-duplicate-collection-elements - Warns about duplicate collection elementsno-boolean-literal-compare - Prevents explicit true/false comparisonsno-equal-arguments - Detects identical arguments to different parametersno-equal-conditions - Warns about duplicate conditions in if-else chainsno-equal-nested-conditions - Warns about redundant nested conditionsno-equal-switch-case - Detects switch cases with identical bodiesno-equal-switch-expression-cases - Warns about switch cases returning same valueno-equal-then-else - Detects identical if-else branchesCode Style & Formatting:
double-literal-format - Enforces consistent double literal formattingnewline-before-case - Enforces blank lines before case clausesnewline-before-constructor - Enforces blank lines before constructorsnewline-before-method - Enforces blank lines before methodsnewline-before-return - Enforces blank lines before return statementsCode Cleanliness:
avoid-barrel-files - Warns about barrel file patternavoid-commented-out-code - Detects commented-out codeavoid-default-tostring - Warns about default toString() usageavoid-deprecated-usage - Warns about deprecated API usageavoid-double-slash-imports - Prevents // in import pathsno-empty-block - Warns about empty code blocksno-empty-string - Warns about empty string usageResource Management:
dispose-class-fields - Ensures disposal of disposable class fieldsMagic Values:
no-magic-number - Requires named constants for numeric literalsno-magic-string - Requires named constants for repeated stringsFuture releases will be documented here. We follow semantic versioning:
Your coding agent can read these notes before it upgrades. Set up the MCP server →