createContext method
Future<JsContext>
createContext({
- JsModuleLoader? moduleLoader,
- List<
JsScript> scripts = const <JsScript>[], - List<
JsModule> modules = const <JsModule>[], - List<
JsHostMethod> methods = const <JsHostMethod>[], - List<
JsFeatures> features = const <JsFeatures>[], - List<
JsPlugin> plugins = const <JsPlugin>[], - JsConsoleSink? onConsole,
Creates a context with an independent global object and module registry.
Implementation
Future<JsContext> createContext({
JsModuleLoader? moduleLoader,
List<JsScript> scripts = const <JsScript>[],
List<JsModule> modules = const <JsModule>[],
List<JsHostMethod> methods = const <JsHostMethod>[],
List<JsFeatures> features = const <JsFeatures>[],
List<JsPlugin> plugins = const <JsPlugin>[],
/// 接收当前 context 的 JavaScript console 事件;未设置时不会向 Dart 转发。
JsConsoleSink? onConsole,
}) async {
_ensureOpen();
final contextRuntimeOptions = JsOptions(
memoryLimitBytes: options.memoryLimitBytes,
stackLimitBytes: options.stackLimitBytes,
maxPendingTasks: options.maxPendingTasks,
);
late final _JsContextRuntimeAdapter adapter;
if (_root case final JsMultiContextRuntimeBase multi) {
final id = await multi.createContext();
adapter = _JsContextRuntimeAdapter.shared(this, multi, id);
} else {
final isolated = await _backend.createRuntime(contextRuntimeOptions);
adapter = _JsContextRuntimeAdapter.isolated(this, isolated);
}
final context = JsContext._(this, adapter);
_contexts.add(context);
try {
context._engine = await createJsContextEngine(
_backend,
adapter,
options: contextRuntimeOptions,
moduleLoader: moduleLoader,
scripts: scripts,
modules: modules,
methods: methods,
features: features,
plugins: plugins,
onConsole: onConsole,
);
} catch (_) {
_contexts.remove(context);
rethrow;
}
if (_closed) {
await context.dispose();
throw JsRuntimeClosedException();
}
return context;
}