首页 > 解决方案 > 如何根据构造函数创建不同的无状态小部件

问题描述

我有一个带有按钮的自定义无状态类:

class BottomBtn extends StatelessWidget {
  BottomBtn({
    this.currentName,
    this.name,
    this.iconSize = 24.0,
    this.isSvg = false,
  });

  final String currentName;
  final String name;
  final double iconSize;
  final bool isSVG;
  @override
  Widget build(BuildContext context) {
    return IconButton(
      icon: isSVG
          ? SvgPicture.asset(
              AppAssets.chatSVG,
              color: currentName == name
                  ? Theme.of(context).accentColor
                  : Theme.of(context).disabledColor,
              colorBlendMode: BlendMode.srcATop,
            )
          : Image.asset(
              AppAssets.chatSVG,
              color: currentName == name
                  ? Theme.of(context).accentColor
                  : Theme.of(context).disabledColor,
              colorBlendMode: BlendMode.srcATop,
            ),
      iconSize: iconSize,
      onPressed: (){},
    );
  }
}

而不是使用切换器,isSVG我想要两个构造函数:BottomBtn.svg()并且BottomBtn.image()取决于用例。如何实施?

标签: flutterdart

解决方案


一种解决方案是创建一个抽象类来扩展 StatelessWidget 来实现 build 方法。然后,您可以创建一个从这个抽象类扩展的类并实现命名构造函数。

abstract class Parent extends StatelessWidget {
  Widget widget;

  Parent(this.widget);

  @override
  Widget build(BuildContext context) {
    return widget;
  }
}

class Child extends Parent {
  Child.fromSVG(...) : super(SvgPicture.asset(...));
  Child.fromImage(...) : super(Image.asset(...));
}


推荐阅读