Dart定义泛型函数

Dart定义泛型函数,dart,Dart,我使用以下代码来定义函数类型 typedef DownloadCallback=未来函数( 构建上下文上下文, 文件标识符, ); 并创建了一个与类型类似的函数 Future publicFileDownloader( 构建上下文上下文, 字符串url, ) { final request=request('GET',Uri.parse(url)); 返回客户端()。发送(请求); } 但是我有以下错误 无法将参数类型“Future Function(BuildContext,String)

我使用以下代码来定义函数类型

typedef DownloadCallback=未来函数(
构建上下文上下文,
文件标识符,
);
并创建了一个与类型类似的函数

Future publicFileDownloader(
构建上下文上下文,
字符串url,
) {
final request=request('GET',Uri.parse(url));
返回客户端()。发送(请求);
}
但是我有以下错误

无法将参数类型“Future Function(BuildContext,String)”分配给参数类型“Future Function(BuildContext,t)”


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

这是另一种情况,尝试指定类型会使Dart更加混乱。问题在于:

final DownloadCallback downloader = publicFileDownloader;
final DownloadCallback<String> downloader = publicFileDownloader;
typedef DownloadCallback<T> = Future<StreamedResponse> Function(
  BuildContext context,
  T fileIdentifier,
);
实际上是指:

final DownloadCallback<dynamic> downloader = publicFileDownloader;
final downloaddcallback downloader=publicFileDownloader;
因此,您应该做以下几点:

final DownloadCallback downloader = publicFileDownloader;
final DownloadCallback<String> downloader = publicFileDownloader;
typedef DownloadCallback<T> = Future<StreamedResponse> Function(
  BuildContext context,
  T fileIdentifier,
);
final downloaddcallback downloader=publicFileDownloader;
下一个问题是在声明typedef时错误使用泛型。您真正想要的是以下内容:

final DownloadCallback downloader = publicFileDownloader;
final DownloadCallback<String> downloader = publicFileDownloader;
typedef DownloadCallback<T> = Future<StreamedResponse> Function(
  BuildContext context,
  T fileIdentifier,
);
typedef DownloadCallback=未来函数(
构建上下文上下文,
文件标识符,
);
因此,完整的代码是:

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;
typedef DownloadCallback=未来函数(
构建上下文上下文,
文件标识符,
);
未来publicFileDownloader(
构建上下文上下文,
字符串url,
) {
final request=request('GET',Uri.parse(url));
返回客户端()。发送(请求);
}
final DownloadCallback downloader=publicFileDownloader;

你能给出一个完整的例子来说明这个问题吗?(例如,如何使用
publicFileDownloader
方法和
DownloadCallback
类型)。在另一个类中,我有一个在构造函数中分配的
final DownloadCallback downloader
,您可以使用
final DownloadCallback downloader=publicFileDownloader要复制错误,您的问题是缺少类型的泛型部分。当您编写
final DownloadCallback
时,实际上是在说
final DownloadCallback
。尝试使用
final downloader=publicFileDownloader
最终下载callback downloader=publicFileDownloadertypedef DownloadCallback=Future函数(字符串上下文,T fileIdentifier,)