当我点击该项目时,我正试图推送一条显示ListView项目的路线(onTap
)。 onTap
的{{1}}属性定义为InkWell
。但是,我希望能够从回调中接收返回值,指示用户是否在已打开的对话框中修改了所述项目。
根据Shrine演示(flutter_gallery示例中的VoidCallback
),将Future<Null> async
函数分配给onTap
似乎没问题:
shrine_home.dart
为什么以及如何运作?感谢。
答案 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}}方法......