workerMain function
void
workerMain(
- WorkerSetup setupFn, {
- void onWorkerSpawn()?,
Entry point for web workers - called when worker JS loads.
Web workers start by calling the compiled main() function. Apps must call this with their setup function in worker.dart's main().
The optional onWorkerSpawn runs before engine setup, allowing
apps to configure logging or other worker-global state. Must be a
top-level function (not a closure) for native platform compatibility.
// lib/worker.dart
import 'package:logging/logging.dart';
void main() {
workerMain(
createEngineParams,
workerInitializer: setupLogging, // Top-level function
);
}
// Top-level function for worker initialization
void setupLogging() {
Logger.root.level = Level.INFO;
Logger.root.onRecord.listen((record) {
print('[Worker] ${record.level.name}: ${record.message}');
});
}
Implementation
void workerMain(WorkerSetup setupFn, {void onWorkerSpawn()?}) {
if (onWorkerSpawn != null) {
try {
onWorkerSpawn();
} catch (e, st) {
// Print to stderr since logger might not be configured yet if initializer failed
// ignore: avoid_print
print('ERROR: Worker initializer failed: $e\n$st');
}
}
// FIXME: wtf?
// Store setup function for later (not currently needed but kept for consistency)
_currentSetupFunction = setupFn;
// Start web worker message loop (delegates to platform-specific implementation)
startWebWorkerLoop(setupFn);
}