当包装似乎不可能时如何共享预配置的小部件

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 包装每个小部件来为它们设置动画吗

如何在 Qt 中将动画用于堆叠的小部件?

如何从小部件收听已关闭的活动? (onActivityResult只在Activity中)

当鼠标悬停而不是 pyFLTK 中的小部件时如何调用函数?