Pular para o conteúdo principal

undefined_super_member_write

Detalhes sobre o diagnóstico 'undefined_super_member_write' produzido pelo analisador do Dart.

The field '{0}' in a superclass of '{1}' is final, so it can't be assigned to.

The member '{0}' is declared in '{1}', but private names are visible only in their own library.

The setter '{0}' isn't defined in a superclass of '{1}'.

The {0} '{1}' in a superclass of '{2}' can't be assigned to.

There's a getter '{0}' in a superclass of '{1}', but no setter.

Descrição

#

O analisador emite este diagnóstico quando um membro recebe uma atribuição usando super, mas nenhuma superclasse da declaração envolvente possui um setter ou um campo não final com esse nome.

Exemplos

#

O código a seguir produz este diagnóstico porque a superclasse A não define um setter chamado bar:

dart
class A {
  set foo(int _) {}
}
​
class B extends A {
  void m() {
    super.bar = 0;
  }
}

O código a seguir produz este diagnóstico porque a superclasse A define apenas um getter chamado foo:

dart
class A {
  int get foo => 0;
}
​
class B extends A {
  void m() {
    super.foo = 0;
  }
}

O código a seguir produz este diagnóstico porque o campo foo da superclasse A é final:

dart
class A {
  final int foo = 0;
}
​
class B extends A {
  void m() {
    super.foo = 0;
  }
}

Correções comuns

#

Se o setter herdado que você pretende usar tiver outro nome, faça o nome corresponder ao do setter herdado:

dart
class A {
  set foo(int _) {}
}
​
class B extends A {
  void m() {
    super.foo = 0;
  }
}

Se o setter não estiver definido, adicione-o a uma superclasse:

dart
class A {
  set foo(int _) {}
​
  set bar(int _) {}
}
​
class B extends A {
  void m() {
    super.bar = 0;
  }
}

Se uma superclasse definir apenas um getter, adicione um setter com o mesmo nome:

dart
class A {
  int get foo => 0;
​
  set foo(int _) {}
}
​
class B extends A {
  void m() {
    super.foo = 0;
  }
}

Se o campo na superclasse for final, torne-o não final:

dart
class A {
  int foo = 0;
}
​
class B extends A {
  void m() {
    super.foo = 0;
  }
}

Caso contrário, remova a atribuição.

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.