Dart 错误:参数类型';(文件)和#x2192;未来<;动态>';can';不能分配给参数类型';(动态)和#x2192;未来者<;动态>';

Dart 错误:参数类型';(文件)和#x2192;未来<;动态>';can';不能分配给参数类型';(动态)和#x2192;未来者<;动态>';,dart,flutter,future,Dart,Flutter,Future,我试图从以下方面编译示例: 我得到了下面的Dart编译错误 错误:参数类型为“(文件)→ 无法分配“未来” 至参数类型“(动态)→ 未来者'。 (参数类型不可分配于lib/google\u api\u rest/main.dart:49) 从以下代码: // Download a file from Google Drive. Future downloadFile(drive.DriveApi api, Client client,

我试图从以下方面编译示例:

我得到了下面的Dart编译错误 错误:参数类型为“(文件)→ 无法分配“未来” 至参数类型“(动态)→ 未来者'。 (参数类型不可分配于lib/google\u api\u rest/main.dart:49)

从以下代码:

 // Download a file from Google Drive.
    Future downloadFile(drive.DriveApi api,
                        Client client,
                        String objectId,
                        String filename) {
      return api.files.get(objectId).then((drive.File file) {
        // The Drive API allows one to download files via `File.downloadUrl`.
        return client.readBytes(file.downloadUrl).then((bytes) {
          var stream = new File(filename).openWrite()..add(bytes);
          return stream.close();
        });
      });
我使用Android Studio 3.2.1、Dart Idk 2.1.0-dev.9.4和Flatter 1.0.0稳定通道

我对飞镖和颤栗还不熟悉, 有人能帮我解决这个问题吗?

api.files.get()
静态声明为。没有泛型的纯
Future
隐含为
Future
。调用采用
函数(T)
,这意味着
函数(动态)
。您正在传递一个
函数(文件)

您可能知道未来的
将始终解析为
文件
,但静态编译器不知道这一点

理想情况下,
api.files.get()
的签名应该更新,以指示它返回一个
未来的
。同时,您可以解决以下问题:

  return api.files.get(objectId).then((result) {
    var file = result as drive.File;
    // The Drive API allows one to download files via `File.downloadUrl`.
    return client.readBytes(file.downloadUrl).then((bytes) {
      var stream = new File(filename).openWrite()..add(bytes);
      return stream.close();
    });