onPressed: function 与 Dart 中的 onPressed: () => function() 有何不同?
How onPressed: func is different from onPressed: () => func() in Dart?
我有一个 class:
class Foo {
void bar() {}
}
我是这样使用它的:
Widget build() {
late Foo foo;
return Column(
children: [
ElevatedButton(
onPressed: foo.bar, // Error:
child: Text('Use'),
),
ElevatedButton(
onPressed: () => foo = Foo(), // Assigning foo here
child: Text('Initialize'),
),
],
);
}
The late local variable 'foo' is definitely unassigned at this point. (Documentation)
如您所见,我正在使用 late
关键字向分析器提示我稍后将实例化,但我仍然看到错误,为什么?
注意:我不是在 HOW 上寻找解决方案,而是 WHY 它不起作用?
因为您在为 children
参数创建 Column
对象的过程中立即创建列表。该列表包含两个 ElevatedButton
对象,它们也作为创建列表的一部分立即创建。为了创建第一个 ElevatedButton
,我们提供了两个参数,onPressed
和 child
,其值被解析并发送给 ElevatedButton
构造函数。
问题是要解决 foo.bar
它需要从 foo
获取 bar
。但是 foo
是 late
并且此时绝对没有分配任何值,因为没有其他代码 运行ning 可以为其提供值。
请注意,当我们向 methods/constructors 提供参数时,我们得到的值在我们 运行 代码进入 method/constructor 之前被解析。此外,我们正在获取引用的副本,因此 foo.bar
需要解析为某个值,因为我们不能将其用作指向 build()
及以后的 foo
变量的某种指针检查它是否设置为 ElevatedButton
对象内的值。
我有一个 class:
class Foo {
void bar() {}
}
我是这样使用它的:
Widget build() {
late Foo foo;
return Column(
children: [
ElevatedButton(
onPressed: foo.bar, // Error:
child: Text('Use'),
),
ElevatedButton(
onPressed: () => foo = Foo(), // Assigning foo here
child: Text('Initialize'),
),
],
);
}
The late local variable 'foo' is definitely unassigned at this point. (Documentation)
如您所见,我正在使用 late
关键字向分析器提示我稍后将实例化,但我仍然看到错误,为什么?
注意:我不是在 HOW 上寻找解决方案,而是 WHY 它不起作用?
因为您在为 children
参数创建 Column
对象的过程中立即创建列表。该列表包含两个 ElevatedButton
对象,它们也作为创建列表的一部分立即创建。为了创建第一个 ElevatedButton
,我们提供了两个参数,onPressed
和 child
,其值被解析并发送给 ElevatedButton
构造函数。
问题是要解决 foo.bar
它需要从 foo
获取 bar
。但是 foo
是 late
并且此时绝对没有分配任何值,因为没有其他代码 运行ning 可以为其提供值。
请注意,当我们向 methods/constructors 提供参数时,我们得到的值在我们 运行 代码进入 method/constructor 之前被解析。此外,我们正在获取引用的副本,因此 foo.bar
需要解析为某个值,因为我们不能将其用作指向 build()
及以后的 foo
变量的某种指针检查它是否设置为 ElevatedButton
对象内的值。