当包装似乎不可能时如何共享预配置的小部件
Posted
技术标签:
【中文标题】当包装似乎不可能时如何共享预配置的小部件【英文标题】:How to share pre-configured widgets when wrapping seems not possible 【发布时间】:2020-05-17 13:42:36 【问题描述】:我有这个颤动按钮:
RaisedButton(
elevation: 2,
color: Colors.lightBlue,
child: Text('Add'),
onPressed: ()
appState.addSet();
,
)
我有许多按钮设置了相同的属性高度值“2”。我不想在每次创建 RaisedButton 时都定义这个值。
然后我想用一个新的 StatelessWidget 和一些参数来包装这个 RaisedButton。
但后来我看到每个 onPressed 甚至都在执行一个具有动态类型定义的函数:
可能是 void 方法或具有参数值等...这意味着我如何提供 ctor 参数
例如涵盖两种类型定义的函数?
或者也许在颤动中我可以以某种方式覆盖样式 - 不要说字体/颜色 - 所有 RaisedButton 类都具有相同的高度?
【问题讨论】:
AFAIK 我们不能在 Flutter 中为参数提供泛型类型,我只是将 Function() 作为类型 【参考方案1】:flutter 的美妙之处在于它的小部件,您只需扩展 RaisedButton
类并将参数传递给超类(此处为RaisedButton
)并在没有输入的情况下默认值。
例子:
class MyRaisedButton extends RaisedButton
const MyRaisedButton(
Key key,
@required VoidCallback onPressed,
Color color,
double elevation,
Widget child,
) : super(
onPressed: onPressed,
elevation: elevation ?? 2,
color: color ?? Colors.lightBlue,
child: child ?? const Text('Button'),
);
使用MyRaisedButton
代替RaisedButton
。如果 RaisedButton
为您提供相同的功能,除了在您不传递参数时将使用默认值。
希望有帮助!
【讨论】:
以上是关于当包装似乎不可能时如何共享预配置的小部件的主要内容,如果未能解决你的问题,请参考以下文章
Pyqt QMdiSubWindow 使用可变数量的小部件调整大小
Flutter - 我可以用 Hero 包装每个小部件来为它们设置动画吗