loadModule method
Future<WasmModule>
loadModule({
- Future<
Uint8List> getUriBodyBytes(- Uri uri
- ModuleConfig? config,
Loads the wasm file.
May throw WasmFileUrisException
Implementation
Future<WasmModule> loadModule({
Future<Uint8List> Function(Uri uri) getUriBodyBytes = getUriBodyBytes,
ModuleConfig? config,
}) async {
final features = await wasmRuntimeFeatures();
final uri = uriForFeatures(features);
final isHttp = uri.isScheme('http') || uri.isScheme('https');
final isAsset = uri.isScheme('asset');
const isWeb = identical(0, 0.0);
final List<ErrorWithTrace> exceptions = [];
WasmModule? wasmModule;
if (isAsset && globalLoadAsset != null) {
try {
final assetData = await globalLoadAsset!(uri.path);
final wasmFile = Uint8List.sublistView(assetData);
if (wasmFile.isEmpty) {
throw Exception('Asset "$uri" is empty.');
}
wasmModule = await compileWasmModule(wasmFile, config: config);
} catch (e, s) {
exceptions.add(ErrorWithTrace(e, s));
}
} else if (isHttp || isWeb) {
try {
final wasmFile = await getUriBodyBytes(uri);
if (wasmFile.isEmpty) {
throw Exception('Url "$uri" returned an empty body.');
}
wasmModule = await compileWasmModule(wasmFile, config: config);
} catch (e, s) {
exceptions.add(ErrorWithTrace(e, s));
}
} else {
try {
final wasmFile = await File.fromUri(uri).readAsBytes();
if (wasmFile.isEmpty) {
throw Exception('File "$uri" is empty.');
}
wasmModule = await compileWasmModule(wasmFile, config: config);
} catch (e, s) {
exceptions.add(ErrorWithTrace(e, s));
}
}
if (wasmModule == null && fallback != null) {
try {
wasmModule = await fallback!.loadModule(
config: config,
getUriBodyBytes: getUriBodyBytes,
);
} catch (e, s) {
exceptions.add(ErrorWithTrace(e, s));
}
}
if (wasmModule == null) {
throw WasmFileUrisException(this, exceptions);
}
return wasmModule;
}