Dart定义泛型函数



我使用以下代码定义了一个函数类型

typedef DownloadCallback = Future<StreamedResponse> Function<T>(
BuildContext context,
T fileIdentifier,
);

并创建了一个类似于类型的函数

Future<StreamedResponse> publicFileDownloader(
BuildContext context,
String url,
) {
final request = Request('GET', Uri.parse(url));
return Client().send(request);
}

但是我有以下错误

不能将参数类型"Future Function(BuildContext,String("分配给参数类型"未来函数(BuildContext、t("。

如何在不使用dynamic类型的情况下修复错误?

这是另一种情况,试图指定类型最终会使Dart更加困惑。问题在于:

final DownloadCallback downloader = publicFileDownloader;

实际意思是:

final DownloadCallback<dynamic> downloader = publicFileDownloader;

因此,你应该做的是:

final DownloadCallback<String> downloader = publicFileDownloader;

下一个问题是在声明typedef时错误地使用泛型。你真正想要的是以下内容:

typedef DownloadCallback<T> = Future<StreamedResponse> Function(
BuildContext context,
T fileIdentifier,
);

所以完整的代码是:

typedef DownloadCallback<T> = Future<StreamedResponse> Function(
BuildContext context,
T fileIdentifier,
);
Future<StreamedResponse> publicFileDownloader(
BuildContext context,
String url,
) {
final request = Request('GET', Uri.parse(url));
return Client().send(request);
}
final DownloadCallback<String> downloader = publicFileDownloader;

相关内容

  • 没有找到相关文章