Flutter Stateful Widget 设置构造函数默认值

RP *_*eth 9 class stateful dart flutter

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

举个例子:

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),
      );
   }
}
Run Code Online (Sandbox Code Playgroud)

当我将小部件创建为另一个小部件的子级并包含所有属性时,它可以完美地工作

child: CustomWidget(
   buttonText: 'Text of the button',
   onPressed: () {},
)
Run Code Online (Sandbox Code Playgroud)

但是,当我将按钮文本排除在外时,应用程序崩溃了。

child: CustomWidget(
   onPressed: () {},
)
Run Code Online (Sandbox Code Playgroud)

一个基本的解决方法是简单地添加行buttonText: ''. 我并不总是想在创建自定义小部件时专门处理每个自定义小部件的属性。

So my question is, how do I set default properties on the constructor? So when I do omit a property the app doesn't crash?

Val*_*aXD 17

您的构造函数名称应该是类名称。要提供默认值,您只需=defaultValue在构造函数中的变量旁边添加一个 next 。

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();
}
Run Code Online (Sandbox Code Playgroud)