get static method
Implementation
static Future<crypto.Digest?> get(
File file, {
required int size,
void Function(bool done, double progress)? onProgress,
ValueNotifier<bool>? canceled,
}) async {
var innerSink = DigestSink();
var outerSink = crypto.md5.startChunkedConversion(innerSink);
final startTime = kDebugMode ? DateTime.now().millisecondsSinceEpoch : 0;
final reader = FileReader();
const bufferSize = 4096 * 64;
var start = 0;
var readed = 0;
try {
while (!(canceled?.value ?? false) && start < size) {
final end = start + bufferSize > size ? size : start + bufferSize;
final blob = file.slice(start, end);
reader.readAsArrayBuffer(blob);
await reader.onLoad.first;
outerSink.add(reader.result as List<int>);
readed += end - start;
start += bufferSize;
if (null != onProgress) {
onProgress(false, readed.toDouble() / size);
}
}
if (kDebugMode) {
final delta = DateTime.now().millisecondsSinceEpoch - startTime;
print('MD5 time $delta');
}
} finally {
outerSink.close();
}
if (canceled?.value ?? false) {
return null;
}
if (null != onProgress) {
onProgress(true, 1.0);
}
return innerSink.value;
}