flutter 无法将参数类型“Future< void>”分配给参数类型“Future< void>Function()”

ss2ws0br  于 2023-04-22  发布在  Flutter
关注(0)|答案(2)|浏览(206)

有一个功能

Future<void> refresh({bool value = false}) async {
    changeUsers(await _service.loadUsers());
    if (value) return;
    ...
  }

我可以用它的方式

return RefreshIndicator(
    onRefresh: refresh,
    ...

但如果我需要传递命名参数

return RefreshIndicator(
    onRefresh: refresh(value: true),
    ...

它给出了错误
无法将参数类型“Future”分配给参数类型“Future Function()”。
怎么修?

mzmfm0qo

mzmfm0qo1#

RefreshIndicator上的onRefresh接受带有签名的函数:

Future<void> Function()

但是当你提供refresh(value: true)时,你不再提供该签名的方法,而是调用你的refresh函数,并提供该调用的结果,最终是Future<void>
如果你想用一些特定的参数来调用你的方法,你需要提供一个函数给onRefresh来实现。例如:

return RefreshIndicator(
    onRefresh: () => refresh(value: true),
...

我们在这里提供() => refresh(value: true)作为匿名函数,它调用refresh(value: true)并返回该调用可能返回的任何内容,这里是Future<void>。因此,提供的方法适合onRefresh的指定签名。

xoefb8l8

xoefb8l82#

要修复此错误,您需要向RefreshIndicatoronRefresh参数传递一个函数。目前,您正在调用refresh函数并将其结果传递给onRefresh,这导致了错误。
要将命名参数传递给refresh function,可以使用lambda函数或匿名函数。

return RefreshIndicator(
  onRefresh: () => refresh(value: true),
  ...
);

相关问题