是否可以将有状态小部件和无状态小部件作为另一个类的子类型?

时间:2021-07-06 07:34:07

标签: 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();
  }
}


0 个答案:

没有答案