我尝试使用一段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坏了吗?
答案 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 parameters,getFile
的签名是:
void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
所以,如果仔细观察,第一个参数是强制性的,但其余参数不是,实际上可以按任何顺序指定,只要你用它们的名字指定它们。
如果您仍然感到困惑,请阅读named parameters。