anchor.diff:      _file.callMethod("remove", [
         () {
           ret.complete({});
  +      },
  +      (b) {
  +        ret.completeError(b);
  +      }
  +    ]);
  +    return ret.future;
  +  }
  +
  +  Future<hetima.WriteResult> truncate(int length) {
  +    Completer<hetima.WriteResult> ret = new Completer();
  +    _file.callMethod("createWriter", [
  +      (a) {
  +        js.JsObject _writer = a;
  +        try {
  +          _writer.callMethod("truncate", [length]);
  +        } catch (e) {
  +          ret.completeError(e);
  +        }
         },
         (b) {
           ret.completeError(b);
  
positive.code:         //
          // seel
          {
            if(_writer["length"] < start) {
              //print("####[A] ${_writer["length"]} ${start}");
              List<int> d = new type.Uint8List.fromList(new List.filled(start-_writer["length"], 0));
              html.Blob b = new html.Blob([d,o]);
              _writer.callMethod("seek", [_writer["length"]]);
              _writer.callMethod("write", [b.slice(0, length+d.length)]);
            } else {
              // print("####[B] ${_writer["length"]} ${start} ${(o as type.Uint8List).length}");
              _writer.callMethod("seek", [start]);            
              html.Blob b = new html.Blob([o]);
              _writer.callMethod("write", [b.slice(0, length)]);
            }
  
negative.code:         _writer = a;
          print("writer ${_writer} ${_writer.runtimeType}");
          _writer["onwrite"] = (d) {
            //  print("####[Z]");
            print("onwrite ${d}");
            _writer["abort"];
            ret.complete(new hetima.WriteResult());
          };
  
          _writer["onerror"] = (d) {
            //  print("####[Z]");
            print("onerror ${d}");
            _writer["abort"];
            ret.completeError({});
  