#flutter #polymorphism
Вопрос:
Недавно я попытался создать абстрактный виджет, который имеет как реализацию без состояния, так и реализацию с сохранением состояния, доступ к которым можно получить с помощью заводских методов.
Ниже я добавил минимальный пример единственного реального рабочего решения, которое, как я понял, подходит для моего варианта использования, но оно оставляет мне желать лучшего.
Например, в этом решении я должен объявить и переопределить каждую переменную в подклассах, в то время как я действительно хотел бы полагаться на тот факт, что они являются подтипами и неявно содержат эти переменные.
Кому-нибудь из вас когда-нибудь приходилось делать нечто подобное? Вы разработали другой подход?
Для тех, кого интересует, зачем мне это нужно: Я хотел создать отдельный класс кнопок для своего приложения, который затем будет иметь различные реализации для определенных стилей кнопок (обычная кнопка, кнопка «в полоску», кнопка, которая «загружается», когда пользователь прокручивает страницу и становится активным, как только пользователь дойдет до конца страницы и т. Д.). Таким образом, я мог бы тогда просто вызвать «Button. implementation», где бы мне не требовалась конкретная кнопка, и иметь весь код, связанный с кнопками, В одном и том же месте.
Ваше здоровье.
abstract class A {
final int intellect;
A(this.intellect);
factory A.giveMeB(int intellect) {
return _B(intellect);
}
factory A.giveMeC(int intellect) {
return _C(intellect);
}
}
class _B extends StatelessWidget implements A {
@override
final int intellect;
_B(this.intellect);
@override
Widget build(BuildContext context) {
return SizedBox.shrink();
}
}
class _C extends StatefulWidget implements A {
@override
final int intellect;
const _C(this.intellect, {Key key}) : super(key: key);
@override
_CState createState() => _CState();
}
class _CState extends State<_C> {
@override
Widget build(BuildContext context) {
return Container();
}
}