addFile method

void addFile(
  1. String name,
  2. List<int> content
)

Implementation

void addFile(String name, List<int> content) {
  final nameBytes = utf8.encode(name);
  final crc = _getCrc32(content);
  final len = content.length;
  final time = _dosDate(DateTime.now());

  // Local File Header
  _out.add([80, 75, 3, 4]); // PK\3\4
  _out.add(_le16(20)); // version
  _out.add(_le16(1 << 11)); // flags (UTF-8)
  _out.add(_le16(0)); // compression (0 = store)
  _out.add(_le32(time));
  _out.add(_le32(crc));
  _out.add(_le32(len));
  _out.add(_le32(len));
  _out.add(_le16(nameBytes.length));
  _out.add(_le16(0)); // extra
  _out.add(nameBytes);
  _out.add(content);

  // Central Directory
  _cd.add([80, 75, 1, 2]); // PK\1\2
  _cd.add(_le16(20)); // version made by
  _cd.add(_le16(20)); // version needed
  _cd.add(_le16(1 << 11)); // flags
  _cd.add(_le16(0)); // compression
  _cd.add(_le32(time));
  _cd.add(_le32(crc));
  _cd.add(_le32(len));
  _cd.add(_le32(len));
  _cd.add(_le16(nameBytes.length));
  _cd.add(_le16(0)); // extra
  _cd.add(_le16(0)); // comment
  _cd.add(_le16(0)); // disk
  _cd.add(_le16(0)); // attr
  _cd.add(_le32(0)); // ext attr
  _cd.add(_le32(_offset));
  _cd.add(nameBytes);

  _offset += 30 + nameBytes.length + len;
  _count++;
}