Skip to content

Commit a937e61

Browse files
Merge pull request #512 from appwrite/fix-flutter-concurrent-init-calls
2 parents ec94bd6 + c96628c commit a937e61

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

templates/flutter/lib/src/client_io.dart.twig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ class ClientIO extends ClientBase with ClientMixin {
3434
@override
3535
late Map<String, String> config;
3636
bool selfSigned;
37+
bool _initProgress = false;
3738
bool _initialized = false;
3839
String? _endPointRealtime;
3940
late http.Client _httpClient;
4041
late HttpClient _nativeClient;
4142
late CookieJar _cookieJar;
4243
final List<Interceptor> _interceptors = [];
4344

45+
bool get initProgress => _initProgress;
4446
bool get initialized => _initialized;
4547
CookieJar get cookieJar => _cookieJar;
4648
@override
@@ -126,6 +128,8 @@ class ClientIO extends ClientBase with ClientMixin {
126128
}
127129

128130
Future init() async {
131+
if(_initProgress) return;
132+
_initProgress = true;
129133
// if web skip cookie implementation and origin header as those are automatically handled by browsers
130134
final Directory cookieDir = await _getCookiePath();
131135
_cookieJar = PersistCookieJar(storage: FileStorage(cookieDir.path));
@@ -168,6 +172,7 @@ class ClientIO extends ClientBase with ClientMixin {
168172
'user-agent', '${packageInfo.packageName}/${packageInfo.version} $device');
169173

170174
_initialized = true;
175+
_initProgress = false;
171176
}
172177

173178
Future<http.BaseRequest> _interceptRequest(http.BaseRequest request) async {
@@ -326,6 +331,9 @@ class ClientIO extends ClientBase with ClientMixin {
326331
Map<String, dynamic> params = const {},
327332
ResponseType? responseType,
328333
}) async {
334+
while (!_initialized && _initProgress) {
335+
await Future.delayed(Duration(milliseconds: 10));
336+
}
329337
if (!_initialized) {
330338
await init();
331339
}

templates/flutter/lib/src/realtime_io.dart.twig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class RealtimeIO extends RealtimeBase with RealtimeMixin {
2323

2424
Future<WebSocketChannel> _getWebSocket(Uri uri) async {
2525
Map<String, String>? headers;
26+
while (!(client as ClientIO).initialized && (client as ClientIO).initProgress) {
27+
await Future.delayed(Duration(milliseconds: 10));
28+
}
2629
if (!(client as ClientIO).initialized) {
2730
await (client as ClientIO).init();
2831
}

0 commit comments

Comments
 (0)