4

このための dart パッケージはないようです。そのため、Javascript 相互運用機能を使用しています。これは私がこれまでに得たものです:

  js.scoped(() {
    done(entry) {
      print('ok');
    }
    js.context.doneCallback = new js.Callback.once(done);
    js.context.chrome.fileSystem.chooseEntry(null, js.context.doneCallback);
  });

それは失敗しています:

キャッチされないエラー: フォーム fileSystem.chooseEntry(object, object) の呼び出しが定義 fileSystem.chooseEntry(optional object options, function callback) と一致しません

間違ったタイプであるため、コールバックが拒否されているようです。

何か案は?

chrome.fileSystem docs 編集: オプションのパラメーターを null に戻しました (以下のダミアンの提案も試しました)。

編集: このコードは動作するようになりました - ありがとう、ダミアン!

  js.scoped(() {
    done(entry) { print('ok'); }
    js.context.chrome.fileSystem.chooseEntry(null, new js.Callback.once(done));
  });

Edit2:ファイル チューザーを開いてそこからパスを読み取るコードを更新しました。ただし、js_interop を介して JavaScript FileReader オブジェクトを使用する方法がわかりません。

Edit3: Dart メーリング リストの議論を参照してください。

4

2 に答える 2

2

{} は chooseEntry が期待しているマップを作成しないと思います。次のように js.map を使用する必要があります。

chrome.fileSystem.chooseEntry(js.map({'type': 'openWritableFile'}),
  js.context.doneCallback);

ただし、この方法ではディスク上の実際のファイル パスを取得できませんでした (ファイルの内容は取得できますが、パスは仮想ファイル システムにあります)。

編集:私は実際に関数を2番目のパラメータとして使用しています:

chrome.fileSystem.chooseEntry(js.map({'type': 'openWritableFile'}),
    new js.Callback.once((var fileEntry) {
  print('fullPath: ' + fileEntry.fullPath);
}));
于 2013-04-19T08:03:35.130 に答える