我正在尝试从以下示例中编译示例: https://github.com/dart-lang/googleapis_examples/blob/master/drive_upload_download_console/bin/main.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的新手, 有人可以帮助我解决此问题吗?
答案 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();
});