Как реализовать методы интерфейса в замороженном классе во флаттере?

Я хочу тип в моем @freezedclass для реализации абстрактного класса (интерфейса), который имеет абстрактные методы. Но я хочу, чтобы только этот тип реализовал это. Как это сделать?

это мой класс

      @freezed
class Union with _$Union {
  const Union._();

  const factory Union.data({required int value}) = Data;

  const factory Union.loading() = _Loading;

  const factory Union.error(String? message) = _ErrorDetails;

  @Implements(Greeting)
  const factory Union.greeting() = SomeGreeting;

  //custom method
  void printHello() {
    print('hello');
  }

  //This compiles and runs normally,it implements the interface's method, but now it is also available for all the types! So now this method can be called even on type Loading for example, but I want it to be available only for type SomeGreeting
  @override
  void sayHello() {
    print(":(");
  }
}

и это абстрактный класс

      abstract class Greeting {
  void sayHello();
}

В документации о пользовательских геттерах и методах

А в разделе реализации интерфейса написано:

Вам необходимо убедиться, что вы соответствуете требованиям интерфейса, реализуя все абстрактные члены. Если интерфейс не имеет членов или только поля, вы можете выполнить контракт интерфейса, добавив их в конструктор типа объединения. Имейте в виду, что если интерфейс определяет метод или получатель, который вы реализуете в классе, вам необходимо использовать инструкции Custom getters и methods.

примечание: цель этого вопроса - просто поиграть с freezed синтаксисы и узнайте, что доступно

0 ответов

Другие вопросы по тегам