Skip to main content

no-magic-number

added in: 1.6.0
⚙️

Warns when number literals are used outside of named constants or variables.

This rule excludes common constants (by default: -1, 0 and 1) and literals inside DateTime constructor as there is no way to create const DateTime and extracting each int argument to separate named constant is far too inconvenient.

⚙️ Config

Set allowed (default is [-1, 0, 1]) to configure the list of allowed numbers

Set allow-only-once (default is false) to allow magic numbers that are used one time within a file.

dart_code_metrics:
...
rules:
...
- no-magic-number:
allowed: [3.14, 100, 12]
allow-only-once: true

Example

❌ Bad:

double circleArea(double radius) => 3.14 * pow(radius, 2); // warns against 3.14

✅ Good:

const pi = 3.14;
double circleArea(double radius) => pi * pow(radius, 2); // using named constant so no warning

❌ Bad:

...
final finalPrice = cart.productCount > 4 // warns against 4
? cart.totalPrice - (cart.totalPrice * 0.25); // warns against 0.25
: cart.totalPrice
...

✅ Good:

...
const productCountThresholdForDiscount = 4;
const discount = 0.25;
final finalPrice = cart.productCount > productCountThresholdForDiscount
? cart.totalPrice - (cart.totalPrice * discount);
: cart.totalPrice
...

Exception:

final someDay = DateTime(2006, 12, 1); // DateTime has no const constructor