createFromFiles static method
Compress given list of files
and save the resulted archive to zipFile
.
sourceDir
is the root directory of files
(all files
must reside
under the sourceDir
).
Set includeBaseDirectory
to true to include the directory name from
sourceDir
at the root of the archive. Set includeBaseDirectory
to
false to include only the contents of the sourceDir
.
Implementation
static Future<void> createFromFiles({
required Directory sourceDir,
required List<File> files,
required File zipFile,
bool includeBaseDirectory = false,
}) async {
var sourceDirPath =
includeBaseDirectory ? sourceDir.parent.path : sourceDir.path;
if (!sourceDirPath.endsWith(Platform.pathSeparator)) {
sourceDirPath += Platform.pathSeparator;
}
final sourceDirPathLen = sourceDirPath.length;
final relativeFilePaths = <String>[];
for (final f in files) {
if (!f.path.startsWith(sourceDirPath)) {
throw Exception('Files must reside under the rootDir');
}
final relativeFilePath = f.path.substring(sourceDirPathLen);
assert(!relativeFilePath.startsWith(Platform.pathSeparator));
relativeFilePaths.add(relativeFilePath);
}
await _channel.invokeMethod<void>('zipFiles', <String, dynamic>{
'sourceDir': sourceDir.path,
'files': relativeFilePaths,
'zipFile': zipFile.path,
'includeBaseDirectory': includeBaseDirectory
});
}