avoid-setters-without-getters

Same as avoid_setters_without_getters in Dart lints

Group
Style
Path
lint/style/avoid-setters-without-getters
Default
Off, opt in
Origin
Dart lints
Rule
135 of 512

Flags a setter that has no corresponding getter.

A property that can be written but not read is surprising: a.x = 1; compiles, but a.x does not. Each setter of a class, enum, or extension type needs a getter of the same name, declared alongside it (a getter or a field) or, except for extension types, inherited from a superclass:

class A {
  set width(int value) {}    // flagged

  int get height => 0;
  set height(int value) {}   // fine
}

Setters that override an inherited setter are not reported. Only concrete inherited getters count as a corresponding getter.

Invalid

example.dartdart
class A {
  set width(int value) {}

  static set registry(Object value) {}
}

enum Mode {
  on, off;

  set label(String value) {}
}

extension type Wrapper(int raw) {
  set doubled(int value) {}
}

class Base {
  int get height => 0;
}

class Sub extends Base {
  set depth(int value) {}
}

class WithMethod {
  void size() {}
  set length(int value) {}
}

abstract class Readable {
  int get width;
}
class WriteOnly implements Readable {
  set width(int value) {}
}

class Remote extends SomeUnknownBase {
  set port(int value) {}
}
Setter has no corresponding getter.
1class A {
2 set width(int value) {}
Setter has no corresponding getter.
3
4 static set registry(Object value) {}
Setter has no corresponding getter.
9
10 set label(String value) {}
Setter has no corresponding getter.
13extension type Wrapper(int raw) {
14 set doubled(int value) {}
Setter has no corresponding getter.
21class Sub extends Base {
22 set depth(int value) {}
Setter has no corresponding getter.
26 void size() {}
27 set length(int value) {}
Setter has no corresponding getter.
33class WriteOnly implements Readable {
34 set width(int value) {}
Setter has no corresponding getter.
37class Remote extends SomeUnknownBase {
38 set port(int value) {}

Valid

example.dartdart
class A {
  int get height => 0;
  set height(int value) {}

  int width = 0;

  static int get count => 0;
  static set count(int value) {}
}

class Base {
  int get depth => 0;
  set name(String value) {}
  String get name => '';
}

class Sub extends Base {
  // Inherits the getter.
  set depth(int value) {}

  // Overrides an inherited setter.
  @override
  set name(String value) {}
}

class Mixed with M {
  set fromMixin(int value) {}
}

mixin M {
  int get fromMixin => 0;
}

// Mixins and extensions are not checked.
mixin OnlySetter {
  set value(int v) {}
}

extension Ext on int {
  set setterOnly(int v) {}
}

Configure avoid-setters-without-getters

Set its severity in falcon.json. See the configuration guide.

falcon.jsonjson
{
  "linter": {
    "rules": {
      "style": {
        "avoid-setters-without-getters": "error"
      }
    }
  }
}

Or silence one occurrence with a suppression comment; the reason is required.

example.dartdart
// falcon-ignore lint/style/avoid-setters-without-getters: <reason>