Contents

Linter rules

Use the Dart linter to identify possible problems in your Dart code. You can use the linter through your IDE or with the dart analyze command. For information on how to enable and disable individual linter rules, see individual rules sections of the analyzer documentation.

This page lists all the linter rules, with details such as when you might want to use each rule, what code patterns trigger it, and how you might fix your code.

Sets

#

To avoid the need to individually select compatible linter rules, consider starting with a linter rule set, which the following packages provide:

lints
Contains two rule sets curated by the Dart team. We recommend using at least the core rule set, which is used when scoring packages uploaded to pub.dev. Or, better yet, use the recommended rule set, a superset of core that identifies additional issues and enforces style and format. If you're writing Flutter code, use the rule set in the flutter_lints package, which builds on lints.

flutter_lints
Contains the flutter rule set, which the Flutter team encourages you to use in Flutter apps, packages, and plugins. This rule set is a superset of the recommended set, which is itself a superset of the core set that partially determines the score of packages uploaded to pub.dev.

To learn how to use a specific rule set, visit the documentation for enabling and disabling linter rules.

To find more predefined rule sets, check out the #lints topic on pub.dev.

Status

#

Each rule has a status or maturity level:

Stable
These rules are safe to use and are verified as functional with the latest versions of the Dart language. All rules are considered stable unless they're marked as experimental, deprecated, or removed.
Experimental
These rules are still under evaluation and might never be stabilized. Use these with caution and report any issues you come across.
Deprecated
These rules are no longer suggested for use and might be removed in a future Dart release.
Removed
These rules have already been removed in the latest stable Dart release.

Quick fixes

#

Some rules can be fixed automatically using quick fixes. A quick fix is an automated edit targeted at fixing the issue reported by the linter rule.

If the rule has a quick fix, it can be applied using dart fix or using your editor with Dart support. To learn more, see Quick fixes for analysis issues.

Rules

#

The following is an index of all linter rules and a short description of their functionality. To learn more about a specific rule, click the Learn more button on its card.

For an auto-generated list containing all linter rules in Dart 3.6.0, check out All linter rules.


always_declare_return_types

Declare method return types.

build

always_put_control_body_on_new_line

Separate the control structure expression from its statement.

build

always_put_required_named_parameters_first

Put required named parameters first.

build

always_require_non_null_named_parameters

Specify @required on named parameters without defaults.

error

always_specify_types

Specify type annotations.

build

always_use_package_imports

Avoid relative imports for files in lib/.

build

annotate_overrides

Annotate overridden members.

build thumb_up flutter

annotate_redeclares

Annotate redeclared members.

science build

avoid_annotating_with_dynamic

Avoid annotating with dynamic when not required.

build

avoid_as

Avoid using as.

error

avoid_bool_literals_in_conditional_expressions

Avoid bool literals in conditional expressions.

avoid_catches_without_on_clauses

Avoid catches without on clauses.

avoid_catching_errors

Don't explicitly catch Error or types that implement it.

avoid_classes_with_only_static_members

Avoid defining a class that contains only static members.

avoid_double_and_int_checks

Avoid double and int checks.

avoid_dynamic_calls

Avoid method calls or property accesses on a dynamic target.

avoid_empty_else

Avoid empty statements in else clauses.

build circles thumb_up flutter

avoid_equals_and_hash_code_on_mutable_classes

Avoid overloading operator == and hashCode on classes not marked @immutable.

avoid_escaping_inner_quotes

Avoid escaping inner quotes by converting surrounding quotes.

build

avoid_field_initializers_in_const_classes

Avoid field initializers in const classes.

avoid_final_parameters

Avoid final for parameter declarations.

avoid_function_literals_in_foreach_calls

Avoid using forEach with a function literal.

build thumb_up flutter

avoid_futureor_void

Avoid using 'FutureOr' as the type of a result.

science

avoid_implementing_value_types

Don't implement classes that override ==.

avoid_init_to_null

Don't explicitly initialize variables to null.

build thumb_up flutter

avoid_js_rounded_ints

Avoid JavaScript rounded ints.

avoid_multiple_declarations_per_line

Don't declare multiple variables on a single line.

build

avoid_null_checks_in_equality_operators

Don't check for null in custom == operators.

build

avoid_positional_boolean_parameters

Avoid positional boolean parameters.

avoid_print

Avoid print calls in production code.

build flutter

avoid_private_typedef_functions

Avoid private typedef functions.

build

avoid_redundant_argument_values

Avoid redundant argument values.

build

avoid_relative_lib_imports

Avoid relative imports for files in lib/.

build circles thumb_up flutter

avoid_renaming_method_parameters

Don't rename parameters of overridden methods.

build thumb_up flutter

avoid_return_types_on_setters

Avoid return types on setters.

build thumb_up flutter

avoid_returning_null

Avoid returning null from members whose return type is bool, double, int, or num.

error

avoid_returning_null_for_future

Avoid returning null for Future.

error

avoid_returning_null_for_void

Avoid returning null for void.

build thumb_up flutter

avoid_returning_this

Avoid returning this from methods just to enable a fluent interface.

avoid_setters_without_getters

Avoid setters without getters.

avoid_shadowing_type_parameters

Avoid shadowing type parameters.

circles thumb_up flutter

avoid_single_cascade_in_expression_statements

Avoid single cascade in expression statements.

build thumb_up flutter

avoid_slow_async_io

Avoid slow asynchronous dart:io methods.

avoid_type_to_string

Avoid.toString() in production code since results may be minified.

avoid_types_as_parameter_names

Avoid types as parameter names.

build circles thumb_up flutter

avoid_types_on_closure_parameters

Avoid annotating types for function expression parameters.

build

avoid_unnecessary_containers

Avoid unnecessary containers.

build flutter

avoid_unstable_final_fields

Avoid overriding a final field to return different values if called multiple times.

error

avoid_unused_constructor_parameters

Avoid defining unused parameters in constructors.

build

avoid_void_async

Avoid async functions that return void.

build

avoid_web_libraries_in_flutter

Avoid using web-only libraries outside Flutter web plugin packages.

flutter

await_only_futures

Await only futures.

build circles thumb_up flutter

camel_case_extensions

Name extensions using UpperCamelCase.

circles thumb_up flutter

camel_case_types

Name types using UpperCamelCase.

circles thumb_up flutter

cancel_subscriptions

Cancel instances of dart:async StreamSubscription.

cascade_invocations

Cascade consecutive method invocations on the same reference.

build

cast_nullable_to_non_nullable

Don't cast a nullable value to a non nullable type.

build

close_sinks

Close instances of dart:core Sink.

collection_methods_unrelated_type

Invocation of various collection methods with arguments of unrelated types.

circles thumb_up flutter

combinators_ordering

Sort combinator names alphabetically.

build

comment_references

Only reference in-scope identifiers in doc comments.

build

conditional_uri_does_not_exist

Missing conditional import.

constant_identifier_names

Prefer using lowerCamelCase for constant names.

build thumb_up flutter

control_flow_in_finally

Avoid control flow in finally blocks.

thumb_up flutter

curly_braces_in_flow_control_structures

DO use curly braces for all flow control structures.

build circles thumb_up flutter

dangling_library_doc_comments

Attach library doc comments to library directives.

build circles thumb_up flutter

depend_on_referenced_packages

Depend on referenced packages.

circles thumb_up flutter

deprecated_consistency

Missing deprecated annotation.

deprecated_member_use_from_same_package

Avoid using deprecated elements from within the package in which they are declared.

build

diagnostic_describe_all_properties

DO reference all public properties in debug methods.

build

directives_ordering

Adhere to Effective Dart Guide directives sorting conventions.

build

discarded_futures

Don't invoke asynchronous functions in non-async blocks.

build

do_not_use_environment

Do not use environment declared variables.

document_ignores

Document ignore comments.

empty_catches

Avoid empty catch blocks.

build circles thumb_up flutter

empty_constructor_bodies

Use ; instead of {} for empty constructor bodies.

build thumb_up flutter

empty_statements

Avoid empty statements.

build thumb_up flutter

enable_null_safety

Do use sound null safety.

error

eol_at_end_of_file

Put a single newline at end of file.

build

exhaustive_cases

Define case clauses for all constants in enum-like classes.

build thumb_up flutter

file_names

Name source files using lowercase_with_underscores.

circles thumb_up flutter

flutter_style_todos

Use Flutter TODO format: // TODO(username): message, https://URL-to-issue.

build

hash_and_equals

Always override hashCode if overriding ==.

build circles thumb_up flutter

implementation_imports

Don't import implementation files from another package.

thumb_up flutter

implicit_call_tearoffs

Explicitly tear-off call methods when using an object as a Function.

build circles thumb_up flutter

implicit_reopen

Don't implicitly reopen classes.

science build

invalid_case_patterns

Use case expressions that are valid in Dart 3.0.

science build

invalid_runtime_check_with_js_interop_types

Avoid runtime type tests with JS interop types where the result may not be platform-consistent.

thumb_up flutter

invariant_booleans

Conditions should not unconditionally evaluate to true or to false.

error

iterable_contains_unrelated_type

Invocation of Iterable<E>.contains with references of unrelated types.

error

join_return_with_assignment

Join return statement with assignment when possible.

leading_newlines_in_multiline_strings

Start multiline strings with a newline.

build

library_annotations

Attach library annotations to library directives.

build circles thumb_up flutter

library_names

Name libraries using lowercase_with_underscores.

library_prefixes

Use lowercase_with_underscores when specifying a library prefix.

thumb_up flutter

library_private_types_in_public_api

Avoid using private types in public APIs.

thumb_up flutter

lines_longer_than_80_chars

Avoid lines longer than 80 characters.

list_remove_unrelated_type

Invocation of remove with references of unrelated types.

error

literal_only_boolean_expressions

Boolean expression composed only with literals.

matching_super_parameters

Use matching super parameter names.

missing_code_block_language_in_doc_comment

A code block is missing a specified language.

missing_whitespace_between_adjacent_strings

Missing whitespace between adjacent strings.

no_adjacent_strings_in_list

Don't use adjacent strings in list.

no_default_cases

No default cases.

science

no_duplicate_case_values

Don't use more than one case with same value.

build circles thumb_up flutter

no_leading_underscores_for_library_prefixes

Avoid leading underscores for library prefixes.

build thumb_up flutter

no_leading_underscores_for_local_identifiers

Avoid leading underscores for local identifiers.

build thumb_up flutter

no_literal_bool_comparisons

Don't compare boolean expressions to boolean literals.

build

no_logic_in_create_state

Don't put any logic in createState.

flutter

no_runtimeType_toString

Avoid calling toString() on runtimeType.

no_self_assignments

Don't assign a variable to itself.

no_wildcard_variable_uses

Don't use wildcard parameters or variables.

circles thumb_up flutter

non_constant_identifier_names

Name non-constant identifiers using lowerCamelCase.

build circles thumb_up flutter

noop_primitive_operations

Noop primitive operations.

build

null_check_on_nullable_type_parameter

Don't use null check on a potentially nullable type parameter.

build circles thumb_up flutter

null_closures

Do not pass null as an argument where a closure is expected.

build thumb_up flutter

omit_local_variable_types

Omit type annotations for local variables.

build

omit_obvious_local_variable_types

Omit obvious type annotations for local variables.

science build

omit_obvious_property_types

Omit obvious type annotations for top-level and static variables.

science build

one_member_abstracts

Avoid defining a one-member abstract class when a simple function will do.

only_throw_errors

Only throw instances of classes extending either Exception or Error.

overridden_fields

Don't override fields.

thumb_up flutter

package_api_docs

Provide doc comments for all public APIs.

warning

package_names

Use lowercase_with_underscores for package names.

thumb_up flutter

package_prefixed_library_names

Prefix library names with the package name and a dot-separated path.

parameter_assignments

Don't reassign references to parameters of functions or methods.

prefer_adjacent_string_concatenation

Use adjacent strings to concatenate string literals.

build thumb_up flutter

prefer_asserts_in_initializer_lists

Prefer putting asserts in initializer lists.

prefer_asserts_with_message

Prefer asserts with message.

prefer_bool_in_asserts

Prefer using a boolean as the assert condition.

error

prefer_collection_literals

Use collection literals when possible.

build thumb_up flutter

prefer_conditional_assignment

Prefer using ??= over testing for null.

build thumb_up flutter

prefer_const_constructors

Prefer const with constant constructors.

build

prefer_const_constructors_in_immutables

Prefer declaring const constructors on @immutable classes.

build flutter

prefer_const_declarations

Prefer const over final for declarations.

build

prefer_const_literals_to_create_immutables

Prefer const literals as parameters of constructors on @immutable classes.

build

prefer_constructors_over_static_methods

Prefer defining constructors instead of static methods to create instances.

prefer_contains

Use contains for List and String instances.

build thumb_up flutter

prefer_double_quotes

Prefer double quotes where they won't require escape sequences.

build

prefer_equal_for_default_values

Use = to separate a named parameter from its default value.

error

prefer_expression_function_bodies

Use => for short members whose body is a single return statement.

build

prefer_final_fields

Private field could be final.

build thumb_up flutter

prefer_final_in_for_each

Prefer final in for-each loop variable if reference is not reassigned.

build

prefer_final_locals

Prefer final for variable declarations if they are not reassigned.

build

prefer_final_parameters

Prefer final for parameter declarations if they are not reassigned.

build

prefer_for_elements_to_map_fromIterable

Prefer for elements when building maps from iterables.

build thumb_up flutter

prefer_foreach

Use forEach to only apply a function to all the elements.

prefer_function_declarations_over_variables

Use a function declaration to bind a function to a name.

build thumb_up flutter

prefer_generic_function_type_aliases

Prefer generic function type aliases.

build circles thumb_up flutter

prefer_if_elements_to_conditional_expressions

Prefer if elements to conditional expressions where possible.

build

prefer_if_null_operators

Prefer using ?? operators.

build thumb_up flutter

prefer_initializing_formals

Use initializing formals when possible.

build thumb_up flutter

prefer_inlined_adds

Inline list item declarations where possible.

build thumb_up flutter

prefer_int_literals

Prefer int literals over double literals.

build

prefer_interpolation_to_compose_strings

Use interpolation to compose strings and values.

build thumb_up flutter

prefer_is_empty

Use isEmpty for Iterables and Maps.

build circles thumb_up flutter

prefer_is_not_empty

Use isNotEmpty for Iterables and Maps.

build circles thumb_up flutter

prefer_is_not_operator

Prefer is! operator.

build thumb_up flutter

prefer_iterable_whereType

Prefer to use whereType on iterable.

build circles thumb_up flutter

prefer_mixin

Prefer using mixins.

prefer_null_aware_method_calls

Prefer null-aware method calls.

prefer_null_aware_operators

Prefer using null-aware operators.

build thumb_up flutter

prefer_relative_imports

Prefer relative imports for files in lib/.

build

prefer_single_quotes

Only use double quotes for strings containing single quotes.

build

prefer_spread_collections

Use spread collections when possible.

build thumb_up flutter

prefer_typing_uninitialized_variables

Prefer typing uninitialized variables and fields.

build circles thumb_up flutter

prefer_void_to_null

Don't use the Null type, unless you are positive that you don't want void.

build

provide_deprecation_message

Provide a deprecation message, via @Deprecated("message").

circles thumb_up flutter

public_member_api_docs

Document all public members.

recursive_getters

Property getter recursively returns itself.

thumb_up flutter

require_trailing_commas

Use trailing commas for all parameter lists and argument lists.

build

secure_pubspec_urls

Use secure urls in pubspec.yaml.

circles thumb_up flutter

sized_box_for_whitespace

SizedBox for whitespace.

build flutter

sized_box_shrink_expand

Use SizedBox shrink and expand named constructors.

slash_for_doc_comments

Prefer using /// for doc comments.

build thumb_up flutter

sort_child_properties_last

Sort child properties last in widget instance creations.

build flutter

sort_constructors_first

Sort constructor declarations before other members.

build

sort_pub_dependencies

Sort pub dependencies alphabetically.

sort_unnamed_constructors_first

Sort unnamed constructor declarations first.

build

specify_nonobvious_local_variable_types

Specify non-obvious type annotations for local variables.

science build

specify_nonobvious_property_types

Specify non-obvious type annotations for top-level and static variables.

science build

super_goes_last

Place the super call last in a constructor initialization list.

error

test_types_in_equals

Test type of argument in operator ==(Object other).

throw_in_finally

Avoid throw in finally block.

tighten_type_of_initializing_formals

Tighten type of initializing formal.

type_annotate_public_apis

Type annotate public APIs.

build

type_init_formals

Don't type annotate initializing formals.

build thumb_up flutter

type_literal_in_constant_pattern

Don't use constant patterns with type literals.

build circles thumb_up flutter

unawaited_futures

Future results in async function bodies must be awaited or marked unawaited using dart:async.

build

unintended_html_in_doc_comment

Use of angle brackets in a doc comment is treated as HTML by Markdown.

circles thumb_up flutter

unnecessary_await_in_return

Unnecessary await keyword in return.

build

unnecessary_brace_in_string_interps

Avoid using braces in interpolation when not needed.

build thumb_up flutter

unnecessary_breaks

Don't use explicit breaks when a break is implied.

build

unnecessary_const

Avoid const keyword.

build thumb_up flutter

unnecessary_constructor_name

Unnecessary .new constructor name.

build thumb_up flutter

unnecessary_final

Don't use final for local variables.

build

unnecessary_getters_setters

Avoid wrapping fields in getters and setters just to be "safe".

build thumb_up flutter

unnecessary_lambdas

Don't create a lambda when a tear-off will do.

build

unnecessary_late

Don't specify the late modifier when it is not needed.

build thumb_up flutter

unnecessary_library_directive

Avoid library directives unless they have documentation comments or annotations.

build

unnecessary_library_name

Don't have a library name in a library declaration.

build thumb_up flutter

unnecessary_new

Unnecessary new keyword.

build thumb_up flutter

unnecessary_null_aware_assignments

Avoid null in null-aware assignment.

build thumb_up flutter

unnecessary_null_aware_operator_on_extension_on_nullable

Unnecessary null aware operator on extension on a nullable type.

unnecessary_null_checks

Unnecessary null checks.

science build

unnecessary_null_in_if_null_operators

Avoid using null in ?? operators.

build thumb_up flutter

unnecessary_nullable_for_final_variable_declarations

Use a non-nullable type for a final variable initialized with a non-nullable value.

build thumb_up flutter

unnecessary_overrides

Don't override a method to do a super method invocation with the same parameters.

build circles thumb_up flutter

unnecessary_parenthesis

Unnecessary parentheses can be removed.

build

unnecessary_raw_strings

Unnecessary raw string.

build

unnecessary_statements

Avoid using unnecessary statements.

unnecessary_string_escapes

Remove unnecessary backslashes in strings.

build thumb_up flutter

unnecessary_string_interpolations

Unnecessary string interpolation.

build thumb_up flutter

unnecessary_this

Don't access members with this unless avoiding shadowing.

build thumb_up flutter

unnecessary_to_list_in_spreads

Unnecessary toList() in spreads.

build thumb_up flutter

unreachable_from_main

Unreachable top-level members in executable libraries.

build

unrelated_type_equality_checks

Equality operator == invocation with references of unrelated types.

circles thumb_up flutter

unsafe_html

Avoid unsafe HTML APIs.

error

unsafe_variance

Unsafe type: Has a type variable in a non-covariant position.

science

use_build_context_synchronously

Do not use BuildContext across asynchronous gaps.

flutter

use_colored_box

Use ColoredBox.

build

use_decorated_box

Use DecoratedBox.

build

use_enums

Use enums rather than classes that behave like enums.

build

use_full_hex_values_for_flutter_colors

Prefer an 8-digit hexadecimal integer (for example, 0xFFFFFFFF) to instantiate a Color.

build flutter

use_function_type_syntax_for_parameters

Use generic function type syntax for parameters.

build thumb_up flutter

use_if_null_to_convert_nulls_to_bools

Use ?? operators to convert nulls to bools.

use_is_even_rather_than_modulo

Prefer intValue.isOdd/isEven instead of checking the result of % 2.

use_key_in_widget_constructors

Use key in widget constructors.

build flutter

use_late_for_private_fields_and_variables

Use late for private members with a non-nullable type.

science

use_named_constants

Use predefined named constants.

build

use_raw_strings

Use raw string to avoid escapes.

build

use_rethrow_when_possible

Use rethrow to rethrow a caught exception.

build thumb_up flutter

use_setters_to_change_properties

Use a setter for operations that conceptually change a property.

use_string_buffers

Use string buffers to compose strings.

use_string_in_part_of_directives

Use string in part of directives.

build circles thumb_up flutter

use_super_parameters

Use super-initializer parameters where possible.

science build thumb_up flutter

use_test_throws_matchers

Use throwsA matcher instead of fail().

use_to_and_as_if_applicable

Start the name of the method with to/_to or as/_as if applicable.

use_truncating_division

Use truncating division.

build

valid_regexps

Use valid regular expression syntax.

circles thumb_up flutter

void_checks

Don't assign to void.

circles thumb_up flutter