@@ -8,7 +8,7 @@ import 'dart:js_interop';
8
8
import 'dart:typed_data' ;
9
9
10
10
import 'package:meta/meta.dart' ;
11
- import 'package:web/helpers .dart' ;
11
+ import 'package:web/web .dart' ;
12
12
13
13
import '../web_helpers/web_helpers.dart' ;
14
14
import 'base.dart' ;
@@ -133,22 +133,26 @@ class XFile extends XFileBase {
133
133
throw Exception ('Safari cannot handle XFiles larger than 4GB.' );
134
134
}
135
135
136
- late XMLHttpRequest request;
137
- try {
138
- request = await HttpRequest .request (path, responseType: 'blob' );
139
- } on ProgressEvent catch (e) {
140
- if (e.type == 'error' ) {
141
- throw Exception (
142
- 'Could not load Blob from its URL. Has it been revoked?' );
143
- }
144
- rethrow ;
145
- }
146
-
147
- _browserBlob = request.response as Blob ? ;
136
+ final Completer <Blob > blobCompleter = Completer <Blob >();
148
137
149
- assert (_browserBlob != null , 'The Blob backing this XFile cannot be null!' );
150
-
151
- return _browserBlob! ;
138
+ late XMLHttpRequest request;
139
+ request = XMLHttpRequest ()
140
+ ..open ('get' , path, true )
141
+ ..responseType = 'blob'
142
+ ..onLoad.listen ((ProgressEvent e) {
143
+ assert (request.response != null ,
144
+ 'The Blob backing this XFile cannot be null!' );
145
+ blobCompleter.complete (request.response! as Blob );
146
+ })
147
+ ..onError.listen ((ProgressEvent e) {
148
+ if (e.type == 'error' ) {
149
+ blobCompleter.completeError (Exception (
150
+ 'Could not load Blob from its URL. Has it been revoked?' ));
151
+ }
152
+ })
153
+ ..send ();
154
+
155
+ return blobCompleter.future;
152
156
}
153
157
154
158
@override
0 commit comments