gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:10:28 24 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 小部件

我在 Flutter 中的 StatelessWidget 也是如此:

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 关键字):

void calculate({required int factor}) {
// ...
}

我们指出必须始终指定 factor 参数,这解决了问题,因为只有 calculate(factor: 42) 等。将是函数的有效调用。

默认值

另一种解决方案是提供默认值。如果我们的参数有默认值,我们可以安全地在调用函数时不指定参数,因为将使用默认值代替:

void calculate({int factor = 42}) {
// ...
}

现在,calculate() 调用将使用 42 作为 factor,这显然是非空的。

可空参数

第三个解决方案是您真正想要考虑的,即您是否想要一个可为空的参数?如果是这样,在您的函数中使用它时,您将必须对参数进行空检查。

但是,这是解决 Key key 问题最常见的方式,因为您并不总是想在 Flutter 中为小部件提供 key (注意可为空的 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/61219993/

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