需要作为义务 - 颤振
Posted
技术标签:
【中文标题】需要作为义务 - 颤振【英文标题】:Required as an obligation -flutter 【发布时间】:2021-09-16 04:59:56 【问题描述】:伙计们,为什么在创建命名构造函数时必须使用“必需”关键字? 如何创建命名构造函数而不需要考虑?
class IconPage extends StatelessWidget
IconPage(required this.icon,required this.label);
final String label;
final IconData icon;
@override
Widget build(BuildContext context)
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
icon,
color: Colors.white,
size: 70,
),
SizedBox(height: 10),
Text(
label,
style: kStandartFontSize,
),
],
);
以下是当我尝试在没有 required 关键字的情况下创建命名构造函数时出现的错误消息:
参数'label'不能有'null'的值,因为它的类型,但是隐含的 默认值为“空”。 尝试添加显式的非“null”默认值或“required”修饰符。
【问题讨论】:
【参考方案1】:required
关键字表示该参数是强制性的。如果您不想使用required
,则必须使用?
将变量更改为nullable
。但是,您必须确保处理可以为空的参数。
class IconPage extends StatelessWidget
IconPage(this.icon, this.label);
final String? label;
final IconData? icon;
...
【讨论】:
谢谢@quoci【参考方案2】:作为对另一个答案的补充:
您使用named parameters 创建了您的构造函数。它们被称为命名参数,因为当你调用你的函数时,你会这样调用它:
function (namedParameter1: "abc", namedParameter2: "123");
所以你可以改变参数的顺序或者根本不调用一个参数。
“不使用 required 关键字”的一种方法是不使用命名参数,而是使用常规的“位置参数”:
IconPage(this.icon, this.label);
在这种情况下,您传递的参数的顺序很重要,默认情况下所有这些参数都是必需的。
所以应该这样调用:
IconPage(IconData(...), "abc"),
虽然这在编写自定义小部件时并不常见(我也不推荐它),但可以使用更简单的功能而不会影响可读性。你可以阅读更多关于位置参数和命名参数的区别here。
【讨论】:
以上是关于需要作为义务 - 颤振的主要内容,如果未能解决你的问题,请参考以下文章
我是不是需要取消 Stream<QuerySnapshot> (颤振)