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,我们提供了两个参数,onPressedchild,其值被解析并发送给 ElevatedButton 构造函数。

问题是要解决 foo.bar 它需要从 foo 获取 bar。但是 foolate 并且此时绝对没有分配任何值,因为没有其他代码 运行ning 可以为其提供值。

请注意,当我们向 methods/constructors 提供参数时,我们得到的值在我们 运行 代码进入 method/constructor 之前被解析。此外,我们正在获取引用的副本,因此 foo.bar 需要解析为某个值,因为我们不能将其用作指向 build() 及以后的 foo 变量的某种指针检查它是否设置为 ElevatedButton 对象内的值。