Question

I tried using a piece of dart code creating a file with HTML5 file API. The code was found on some dart slides, slightly fixed to be able to run under M1. I'm using latest Dart SDK 0.2.1.2_r14167. Code is simple (I also tried calling it with last two parameters (callbacks) set with the same result).

import 'dart:html';

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

It throws:

Exception: NoSuchMethodError: incorrect number of arguments passed to method named 'getFile' Receiver: Instance of '_DirectoryEntryImpl@0x33cc944a' Tried calling: getFile("log.txt", Instance of 'LinkedHashMapImplementation', null, null) Found: getFile(path, options, successCallback, errorCallback) Stack Trace: #0 Object.noSuchMethod (dart:core-patch:772:3)

Am I doing something wrong or SDK is broken?

Was it helpful?

Solution

Yes you are doing it basically wrong, but I wouldn't blame you since even the IDE seems to do it the way you are doing it!

Here's how to do it properly:

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

It uses named parameters and the signature for getFile is:

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

So, if you look carefully, the first parameter is compulsory, but the rest aren't and in fact can be specified in any order as long as you specify them by their names.

If you are still confused, read about the named parameters.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top