@@ -259,12 +259,13 @@ extension CanvasKitExtension on CanvasKit {
259259 );
260260}
261261
262- @JS ('window.CanvasKitInit' )
263- external JSAny _CanvasKitInit (CanvasKitInitOptions options);
262+ @JS ()
263+ @staticInterop
264+ class CanvasKitModule {}
264265
265- Future < CanvasKit > CanvasKitInit ( CanvasKitInitOptions options) {
266- return js_util. promiseToFuture < CanvasKit >(
267- _CanvasKitInit ( options).toObjectShallow );
266+ extension CanvasKitModuleExtension on CanvasKitModule {
267+ @JS ( 'default' )
268+ external JSPromise < JSAny > defaultExport ( CanvasKitInitOptions options);
268269}
269270
270271typedef LocateFileCallback = String Function (String file, String unusedBase);
@@ -3661,11 +3662,11 @@ String canvasKitWasmModuleUrl(String file, String canvasKitBase) =>
36613662/// Downloads the CanvasKit JavaScript, then calls `CanvasKitInit` to download
36623663/// and intialize the CanvasKit wasm.
36633664Future <CanvasKit > downloadCanvasKit () async {
3664- await _downloadOneOf (_canvasKitJsUrls);
3665+ final CanvasKitModule canvasKitModule = await _downloadOneOf (_canvasKitJsUrls);
36653666
3666- final CanvasKit canvasKit = await CanvasKitInit (CanvasKitInitOptions (
3667+ final CanvasKit canvasKit = ( await canvasKitModule. defaultExport (CanvasKitInitOptions (
36673668 locateFile: createLocateFileCallback (canvasKitWasmModuleUrl),
3668- ));
3669+ )).toDart) as CanvasKit ;
36693670
36703671 if (canvasKit.ParagraphBuilder .RequiresClientICU () && ! browserSupportsCanvaskitChromium) {
36713672 throw Exception (
@@ -3681,10 +3682,12 @@ Future<CanvasKit> downloadCanvasKit() async {
36813682/// downloads it.
36823683///
36833684/// If none of the URLs can be downloaded, throws an [Exception] .
3684- Future <void > _downloadOneOf (Iterable <String > urls) async {
3685+ Future <CanvasKitModule > _downloadOneOf (Iterable <String > urls) async {
36853686 for (final String url in urls) {
3686- if (await _downloadCanvasKitJs (url)) {
3687- return ;
3687+ try {
3688+ return await _downloadCanvasKitJs (url);
3689+ } catch (_) {
3690+ continue ;
36883691 }
36893692 }
36903693
@@ -3698,32 +3701,7 @@ Future<void> _downloadOneOf(Iterable<String> urls) async {
36983701///
36993702/// Returns a [Future] that completes with `true` if the CanvasKit JavaScript
37003703/// file was successfully downloaded, or `false` if it failed.
3701- Future <bool > _downloadCanvasKitJs (String url) {
3702- final DomHTMLScriptElement canvasKitScript =
3703- createDomHTMLScriptElement (configuration.nonce);
3704- canvasKitScript.src = createTrustedScriptUrl (url);
3705-
3706- final Completer <bool > canvasKitLoadCompleter = Completer <bool >();
3707-
3708- late final DomEventListener loadCallback;
3709- late final DomEventListener errorCallback;
3710-
3711- void loadEventHandler (DomEvent _) {
3712- canvasKitScript.remove ();
3713- canvasKitLoadCompleter.complete (true );
3714- }
3715- void errorEventHandler (DomEvent errorEvent) {
3716- canvasKitScript.remove ();
3717- canvasKitLoadCompleter.complete (false );
3718- }
3719-
3720- loadCallback = createDomEventListener (loadEventHandler);
3721- errorCallback = createDomEventListener (errorEventHandler);
3722-
3723- canvasKitScript.addEventListener ('load' , loadCallback);
3724- canvasKitScript.addEventListener ('error' , errorCallback);
3725-
3726- domDocument.head! .appendChild (canvasKitScript);
3727-
3728- return canvasKitLoadCompleter.future;
3704+ Future <CanvasKitModule > _downloadCanvasKitJs (String url) async {
3705+ final JSAny scriptUrl = createTrustedScriptUrl (url);
3706+ return (await importModule (scriptUrl).toDart) as CanvasKitModule ;
37293707}
0 commit comments