Skip to main content


added in: 1.6.0

Suggests to use static class member instead of global constants, variables and functions.


  • Easy to search: great help from IDE autocomplete. Type class/file name to find domain, and type dot to list all members.
  • Easy to import: name conflicts will happen less often since all names are scoped to file name/class name. No need to use import 'file.dart' as 'file' to resolve name conflicts.
  • Easy to read: declarations in code will be always shown paired with domain they belong to. Compare Circle.getArea and getArea or getCircleArea.
  • member-ordering rule will be applied to class members.


  • The code amount slightly increases.

When fixing rule issues and moving global members into a class, consider also renaming to avoid duplicating context. For example, getCircleArea global function should become Circle.getArea, not Circle.getCircleArea.


For this rule it's recommended to exclude the test folder.

⚙️ Config

Set ignore-private (default is false) to ignore private global declarations.

Set ignore-names (default is none) to ignore names matching regular expressions (for example, Riverpod providers, flutter hooks, etc).

Set ignore-annotations (default is [FunctionalWidget, swidget, hwidget, hcwidget, riverpod]) to override default ignored annotation list.

- prefer-static-class
- allowedAnnotation
ignore-private: true
- (.*)Provider
- use(.*)


❌ Bad:

// circle.dart
int getCircleArea() {} // LINT
int getPerimeter() // LINT

const _PI = 3.14; // LINT

✅ Good:

// circle.dart
class Circle {
static int getArea() {}
static int getPerimeter() {}

static const _PI = 3.14;