3

我尝试使用一段 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(路径, 选项, successCallback, errorCallback) 堆栈跟踪: #0 Object.noSuchMethod (dart:core-patch:772:3)

我做错了什么还是SDK坏了?

4

1 回答 1

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

它使用命名参数,签名为getFile

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

因此,如果您仔细看,第一个参数是强制性的,但其余的不是,实际上可以按任何顺序指定,只要您按名称指定它们即可。

如果您仍然感到困惑,请阅读命名参数

于 2012-11-04T21:39:11.653 回答