【问题标题】:Dart's DirectoryEntry.getFile with 'options' parameter throws NoSuchMethodErrorDart 的 DirectoryEntry.getFile 带有 'options' 参数抛出 NoSuchMethodError
【发布时间】:2012-11-04 21:04:07
【问题描述】:

我尝试使用一段 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, 空)找到:getFile(路径,选项,成功回调,错误回调) 堆栈跟踪:#0 Object.noSuchMethod (dart:core-patch:772:3)

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

【问题讨论】:

    标签: dart html5-filesystem


    【解决方案1】:

    是的,你这样做基本上是错误的,但我不会责怪你,因为即使 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

    【讨论】:

    • 啊哈!你是对的,我怀疑花括号有些东西,但在阅读了他们的文档后推断出命名它们是可选的。
    猜你喜欢
    • 2017-12-19
    • 2020-02-09
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多