gpt4 book ai didi

dart - onTap VoidCallback 处理程序在异步时如何工作(返回 Future)?

转载 作者:IT王子 更新时间:2023-10-29 07:01:22 25 4
gpt4 key购买 nike

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

分配 Future<Null> async功能onTap似乎没问题,根据 Shrine 演示(flutter_gallery 示例中的 shrine_home.dart):

  Future<Null> _showOrderPage(Product product) async {
final Order order = _shoppingCart[product] ?? new Order(product: product);
final Order completedOrder = await Navigator.push(context, new ShrineOrderRoute(
order: order,
builder: (BuildContext context) {
return new OrderPage(
order: order,
products: _products,
shoppingCart: _shoppingCart,
);
}
));
assert(completedOrder.product != null);
if (completedOrder.quantity == 0)
_shoppingCart.remove(completedOrder.product);
}

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

最佳答案

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 .

关于dart - onTap VoidCallback 处理程序在异步时如何工作(返回 Future<Null>)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44614804/

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