错误:无法将参数类型“(文件)→Future <dynamic>”分配给参数类型“(dynamic)→FutureOr <dynamic>”

时间:2018-12-11 19:13:13

标签: dart flutter future

我正在尝试从以下示例中编译示例: https://github.com/dart-lang/googleapis_examples/blob/master/drive_upload_download_console/bin/main.dart

,我收到以下Dart编译错误

  

错误:无法分配参数类型'(文件)→将来'   参数类型为“(dynamic)→FutureOr”。   (argument_type_not_assignable可在lib / google_api_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和Flutter 1.0.0稳定通道一起使用。

我是Dart和Flutter的新手, 有人可以帮助我解决此问题吗?

1 个答案:

答案 0 :(得分:2)

api.files.get()被静态声明为return a Future。没有泛型的裸Future隐式是Future<dynamic>Future<T>.then调用需要一个Function(T),即Function(dynamic)。您正在传递Function(File)

您可能知道Future始终会解析为File,但是静态地编译器并不知道。

理想情况下,应更新api.files.get()的签名以指示它返回Future<File>。同时,您可以解决此问题:

  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();
    });