flutter - 如何根据构造函数创建不同的无状态小部件
问题描述
我有一个带有按钮的自定义无状态类:
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()
取决于用例。如何实施?
解决方案
一种解决方案是创建一个抽象类来扩展 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(...));
}
推荐阅读
- python - 如何从mysql中获取数据作为int而不是python中的元组
- javascript - 在返回函数反应js中的不同标签处动态呈现数组
- shell - 在 UNIX 主机的所有公共 IPv4 和 IPv6 地址上运行 `whois` 和 `host`
- javascript - 使用来自 three.js 的颜色选择器的 HEX 值作为字符串
- java - “文件丢失!” USACO Java 程序错误
- r - 如何将参数传递给引用嵌套数据框的列名的 purrr:::map?
- python - 8带有A*的益智游戏:开放集的结构是什么?
- python - Python XPath 从 Google Project Sunroof 返回空列表
- javascript - [Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘类型’”
- java - 在 Lambda 表达式上调用方法