Флаттер: наследование от абстрактного виджета без сохранения состояния - PullRequest
0 голосов
/ 01 марта 2019

У меня есть класс, который должен принять пользовательский виджет.Этот может иметь две разные реализации, поэтому я хотел бы иметь абстрактный класс в качестве интерфейса и создать два других класса, которые расширяют абстрактный.Итак, у меня есть:

abstract class ICustomWidget extends StatelessWidget{}

class A extends ICustomWidget{

  @override
  Widget build(BuildContext context) =>
     //Implementation
}

class B extends ICustomWidget {
  @override
  Widget build(BuildContext context) =>
     //Implementation
}

Я хочу спросить, это правильный способ сделать это или есть другой.Спасибо

1 Ответ

0 голосов
/ 02 марта 2019

Вместо extends я бы использовал implements, потому что ICustomWidget - это интерфейс, а не класс, за исключением случаев, когда вы можете дать больше контекста и / или образца кода.

Вот примеркод для интерфейса


abstract class ICustomWidget {
// or
// abstract class ICustomWidget extends StatelessWidget {
  void myProtocal();
}

class A extends StatelessWidget implements ICustomWidget {

  @override
  void myProtocal() {
    // TODO: implement myProtocal
  }

  @override
  Widget build(BuildContext context) {
     //Implementation
  }
}

class B extends ICustomWidget {
  // compilation error, `myProtocal` not implemented
  @override
  Widget build(BuildContext context) {
     //Implementation
  }
}
...