我使用以下代码定义了一个函数类型
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;