带有'options'参数的Dart的DirectoryEntry.getFile抛出NoSuchMethodError

时间:2012-11-04 21:04:07

标签: dart html5-filesystem

我尝试使用一段dart代码创建一个带有HTML5文件API的文件。代码在一些飞镖幻灯片上找到,略微固定以便能够在M1下运行。我正在使用最新的Dart SDK 0.2.1.2_r14167。代码很简单(我也尝试用最后两个参数(回调)调用它来设置相同的结果)。

import 'dart:html';

void main() {
  window.webkitRequestFileSystem(LocalWindow.TEMPORARY, 50*1024*1024, (fs) {
    fs.root.getFile('log.txt', {"create": true}, null, null);
  });
}

它抛出:

  

异常:NoSuchMethodError:传递给的参数数量不正确   名为'getFile'的方法接收者:实例   '_DirectoryEntryImpl @ 0x33cc944a'尝试调用:getFile(“log.txt”,   'LinkedHashMapImplementation'的实例,null,   null)发现:getFile(path,options,successCallback,errorCallback)   堆栈跟踪:#0 Object.noSuchMethod(dart:core-patch:772:3)

我做错了什么或SDK坏了吗?

1 个答案:

答案 0 :(得分:2)

是的,你这样做基本上是错的,但我不会责怪你,因为即使IDE似乎也按照你的方式去做!

以下是如何正确地做到这一点:

import 'dart:html';

void main() {
  window.webkitRequestFileSystem(LocalWindow.TEMPORARY, 50*1024*1024, (DOMFileSystem fs) {
    fs.root.getFile('log.txt', options: {'create': true}, successCallback: (FileEntry e) {
      print(e.fullPath);
    });
  });
}

它使用named parametersgetFile的签名是:

void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});

所以,如果仔细观察,第一个参数是强制性的,但其余参数不是,实际上可以按任何顺序指定,只要你用它们的名字指定它们。

如果您仍然感到困惑,请阅读named parameters