当onTap VoidCallback处理程序是异步(返回Future <null>)时,​​它是如何工作的?

时间:2017-06-18 12:08:47

标签: dart flutter

当我点击该项目时,我正试图推送一条显示ListView项目的路线(onTap)。 onTap的{​​{1}}属性定义为InkWell。但是,我希望能够从回调中接收返回值,指示用户是否在已打开的对话框中修改了所述项目。

根据Shrine演示(flutter_gallery示例中的VoidCallback),将Future<Null> async函数分配给onTap似乎没问题:

shrine_home.dart

为什么以及如何运作?感谢。

2 个答案:

答案 0 :(得分:1)

Dart允许您将具有非void返回值的函数用作具有void返回值的函数。该函数仍将正常返回值,但分析器将推断它们属于void类型,并且如果您尝试使用它们将会抱怨,除非您将它们转换回其他内容。

typedef void VoidCallback();
typedef int IntCallback();

final IntCallback i = () => 42;

void main() {
  final VoidCallback v = i;
  print("${v()}");        // prints 42
  print(v() as int);      // also prints 42
  print(v().toString());  // also prints 42, but analyzer complains:
                          // method 'toString' isn't defined for class 'void'
}

这就是为什么你可以使用一个将Future<Null>作为VoidCallback返回的函数。

答案 1 :(得分:0)

糟糕。刚刚意识到这个任务实际上是通过一个lambda,这是一个VoidCallback

onPressed: () { _showOrderPage(product); }

仍然 - 它似乎在另一个地方为我工作,我将Future<Null> async函数分配给onPressed的{​​{1}}方法......