Flutter有状态Widget设置构造函数默认值

8

我尝试创建了一个自定义的有状态小部件。但我无法找到如何在构造函数中设置默认值的参考。

例如:

class CustomWidget extends StatefulWidget {
   final String buttonText;
   final Function onPressed;

   CustomWidget({Key key, @required this.onPressed, this.buttonText}) : super(key: key);

   @override
   _CustomWidgetState createState() => _CustomWidgetState();
}

class _CustomWidgetState extends State<CustomWidget> {
   @override
   Widget build(BuildContext context) {
      return FlatButton(
         onPressed: widget.onPressed,
         child: Text(widget.buttonText),
      );
   }
}

当我将widget创建为另一个widget的子级并包括所有属性时,它可以完美运行。
child: CustomWidget(
   buttonText: 'Text of the button',
   onPressed: () {},
)

不过,如果我不包含buttonText,应用程序就会崩溃。

child: CustomWidget(
   onPressed: () {},
)

一个基本的解决方法是简单地添加这行代码:buttonText: ''。我并不总是想在创建自定义部件时明确指定每个属性。我的问题是:如何在构造函数上设置默认属性,以便当我省略一个属性时,应用程序不会崩溃?
1个回答

16

构造函数的名称应该与类名相同。如果要提供默认值,只需在构造函数中在变量旁边添加=defaultValue即可。

class CustomWidget extends StatefulWidget {
   final String buttonText;
   final Function onPressed;

   CustomWidget ({Key key, @required this.onPressed, this.buttonText = 'defaultString'}) :super(key: key);//this.buttonText='defaultString'

   @override
   _CustomWidgetState createState() => _CustomWidgetState();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接