gpt4 book ai didi

flutter - 由于它在 Dart 中的类型,该参数的值不能为 'null'

转载 作者:行者123 更新时间:2023-12-03 03:30:07 33 4
gpt4 key购买 nike

Dart 功能
我有以下 Dart 函数,我现在使用空安全:

void calculate({int factor}) {
// ...
}
分析器提示说:

The parameter 'factor' can't have a value of 'null' because of its type, and no non-null default value is provided.


flutter 小部件
我的 StatelessWidget也是这种情况在 flutter 中:
class Foo extends StatelessWidget {
const Foo({Key key}): super(key: key);

// ...
}
我收到以下错误:

The parameter 'key' can't have a value of 'null' because of its type, and no non-null default value is provided.



我该如何解决这个问题?

最佳答案

为什么
发生这种情况的原因是因为启用了空安全,您的 不可为空 参数 factorkey 不能 null .
在函数和构造函数中,这些值可能是 null当在没有命名参数的情况下调用函数时:calculate()Foo() .但是因为类型( intKey )是 不可为空 , 这是 无效 代码 - 它们绝不能为空。
解决方案
解决这个问题的方法主要有以下三种:required这可能是此问题最常见的解决方案,它表明变量 必须设置 .这意味着如果我们有(注意 required 关键字):

void calculate({required int factor}) {
// ...
}
我们指出 factor必须始终指定参数,这解决了问题,因为只有 calculate(factor: 42)等。将是该函数的有效调用。
默认值
另一种解决方案是提供默认值。如果我们的参数有默认值,我们可以安全地在调用函数时不指定参数,因为将使用默认值:
void calculate({int factor = 42}) {
// ...
}
现在,一个 calculate()调用将使用 42factor ,这显然是非空的。
可空参数
第三个解决方案是您真正想要考虑的问题,即您想要一个可为空的参数吗?如果是这样,则在您的函数中使用该参数时,您必须对其进行空检查。
但是,这是您最常希望解决的方法 Key key问题,因为您并不总是想在 Flutter 中为您的小部件提供一个键(注意可以为空的 Key? 类型):
class Foo extends StatelessWidget {
const Foo({Key? key}): super(key: key);

// ...
}
现在,您可以安全地构建 Foo()无需提供 key 。
位置参数
请注意,这同样适用于 位置参数,即它们可以为可空或不可为空,但是,它们不能用 required 注释并且不能有默认值,因为它们总是需要传递。
void foo(int param1) {} // bar(null) is invalid.

void bar(int? param1) {} // bar(null) is valid.

关于flutter - 由于它在 Dart 中的类型,该参数的值不能为 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64560461/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com