Flutter:如何从现有的窗口小部件正确创建自定义窗口小部件并使用其属性(有时有条件)

伊万·尤德(Ivan Yoed)

我正在尝试创建一个与现有Widget几乎相同的Widget。这意味着,如果我想使用现有属性的属性,则必须从我的自定义小部件中将其传递给它。在此示例中,我将创建一个包含TextField的Widget。我的方法是这样的:

class MyTextFieldWithPadding extends StatelessWidget {

  final Function onTap;
  final ValueSetter<String> onChanged;
  final TextEditingController controller;
  final double padding;

  MyTextFieldWithPadding({this.controller, this.onTap, this.onChanged, this.padding});

  @override
  Widget build(BuildContext context) {

    return Padding(
      padding: EdgeInsets.all(padding),
        child: TextField(
          onTap: onTap,
          onChanged: onChanged,
          controller: controller,
        )
    );
  }
}

但是我有一个问题:并非总是我想将值传递给TextField的属性,例如onTap函数。目前,我还没有解决如何将参数有条件地传递给嵌套小部件的问题。如果我创建这样的小部件:

             MyTextFieldWithPadding(
                controller: controller,
                onChanged: (value){
                  print(value);
                },
              )

如果不使用所有属性,我总是会出现异常,因为是的,它们为空。

在构建MyTextFieldWithPadding时引发了以下NoSuchMethodError:在null上调用了方法'> ='。接收方:null尝试调用:> =(0.0)

等等。

也许还有其他创建窗口小部件的方法,如果您能给我一些反馈,我将非常感激!

蒂埃里

解决方案1:参数列表中的默认值

class MyTextFieldWithPadding extends StatelessWidget {
  final double padding;
  MyTextFieldWithPadding({Key key, this.padding = 10.0}) : super(key: key);
}

虽然更加惯用,但是如果您嵌套自定义窗口小部件,则必须在各处定义默认值。

例子:

class MyOtherWidget extends StatelessWidget {
  final double padding;
  MyOtherWidget({Key key, this.padding = 10.0}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MyTextFieldWithPadding(padding: padding);
  }
}

如果您不这样做,则中的padding将为null MyTextFieldWithPadding

因此,如果您嵌套自定义窗口小部件,则最好...

解决方案2:初始化为默认值

class MyTextFieldWithPadding extends StatelessWidget {
  final double _padding;
  MyTextFieldWithPadding({Key key, padding}) :
    _padding = padding ?? 10.0,
    super(key: key);
}

无需在任何地方定义默认值。如果为空,将使用默认值。

旁注:回调方法

class MyCustomWidget extends StatelessWidget {
  final String _label;
  final VoidCallback onPressed;
  
  MyTextFieldWithPadding({Key key, this.onPressed}) :
    _label = label ?? 'CLICK',
    super(key: key);

  @override
  Widget build(BuildContext context) {
    return Elevated(
      onPressed: () => onPressed?.call(),
      child: Text(_label),
    );
  }
}

onPressed回调将仅在未调用的情况下被调用null

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用一组现有的小部件创建自定义小部件?

来自分类Dev

带有MVVM和init事件的Kendo自定义窗口小部件-如何?

来自分类Dev

使用Futurebuilder有条件地渲染小部件

来自分类Dev

Python:如何显示带有自定义内容,无窗口小部件和无事件循环的大窗口

来自分类Dev

带有社交图标的Wordpress自定义窗口小部件

来自分类Dev

如何从自定义窗口小部件类更改中央窗口小部件?

来自分类Dev

Flutter自定义窗口小部件无法显示

来自分类Dev

如何创建自定义的fld sdk小部件,重建flutter和使用新的小部件

来自分类Dev

窗口小部件的android自定义字体属性

来自分类Dev

PySide:如果我将具有其自己布局的自定义窗口小部件添加到父窗口小部件的布局,则它具有偏移量。是什么原因造成的?

来自分类Dev

有条件地显示Nav小部件的项目

来自分类Dev

使用自定义窗口小部件填充QListWidget

来自分类Dev

带有条件小部件的Flutter Hero交易容器

来自分类Dev

如何替换现有的Kendo UI小部件?

来自分类Dev

窗口小部件没有更新

来自分类Dev

如何有条件地显示一些小部件

来自分类Dev

如何使用异步源获取自定义窗口小部件的数据

来自分类Dev

如何使用dojo build.sh构建自定义窗口小部件

来自分类Dev

如何更改窗口/表中现有scene2d.ui小部件的大小?

来自分类Dev

具有模板UI的自定义Gtk小部件

来自分类Dev

具有自定义文本支持的小部件

来自分类Dev

Dojo没有看到自定义小部件

来自分类Dev

有没有办法对小部件进行有条件的重建

来自分类Dev

Yii,自定义窗口小部件返回null

来自分类Dev

瓦拉GTK +。自定义窗口小部件的问题

来自分类Dev

appcompat SeachView窗口小部件的自定义字体

来自分类Dev

颤振有向图。我可以将CustomPainter类与自定义窗口小部件一起使用吗?

来自分类Dev

在Flutter中是否可以在同一窗口小部件中显示图像和视频,是否有共同的窗口小部件?

来自分类Dev

自定义Django小部件/字段:对象没有属性“属性”

Related 相关文章

  1. 1

    使用一组现有的小部件创建自定义小部件?

  2. 2

    带有MVVM和init事件的Kendo自定义窗口小部件-如何?

  3. 3

    使用Futurebuilder有条件地渲染小部件

  4. 4

    Python:如何显示带有自定义内容,无窗口小部件和无事件循环的大窗口

  5. 5

    带有社交图标的Wordpress自定义窗口小部件

  6. 6

    如何从自定义窗口小部件类更改中央窗口小部件?

  7. 7

    Flutter自定义窗口小部件无法显示

  8. 8

    如何创建自定义的fld sdk小部件,重建flutter和使用新的小部件

  9. 9

    窗口小部件的android自定义字体属性

  10. 10

    PySide:如果我将具有其自己布局的自定义窗口小部件添加到父窗口小部件的布局,则它具有偏移量。是什么原因造成的?

  11. 11

    有条件地显示Nav小部件的项目

  12. 12

    使用自定义窗口小部件填充QListWidget

  13. 13

    带有条件小部件的Flutter Hero交易容器

  14. 14

    如何替换现有的Kendo UI小部件?

  15. 15

    窗口小部件没有更新

  16. 16

    如何有条件地显示一些小部件

  17. 17

    如何使用异步源获取自定义窗口小部件的数据

  18. 18

    如何使用dojo build.sh构建自定义窗口小部件

  19. 19

    如何更改窗口/表中现有scene2d.ui小部件的大小?

  20. 20

    具有模板UI的自定义Gtk小部件

  21. 21

    具有自定义文本支持的小部件

  22. 22

    Dojo没有看到自定义小部件

  23. 23

    有没有办法对小部件进行有条件的重建

  24. 24

    Yii,自定义窗口小部件返回null

  25. 25

    瓦拉GTK +。自定义窗口小部件的问题

  26. 26

    appcompat SeachView窗口小部件的自定义字体

  27. 27

    颤振有向图。我可以将CustomPainter类与自定义窗口小部件一起使用吗?

  28. 28

    在Flutter中是否可以在同一窗口小部件中显示图像和视频,是否有共同的窗口小部件?

  29. 29

    自定义Django小部件/字段:对象没有属性“属性”

热门标签

归档