Skip to content

Commit 2a325f0

Browse files
committed
1 parent d83f632 commit 2a325f0

File tree

4 files changed

+46
-1
lines changed

4 files changed

+46
-1
lines changed

packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart

+8
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,19 @@ class FirebaseFirestore extends FirebasePluginPlatform {
283283
///
284284
/// You must set these before invoking any other methods on this [FirebaseFirestore] instance.
285285
set settings(Settings settings) {
286+
assert(
287+
!(settings.experimentalAutoDetectLongPolling &&
288+
settings.experimentalForceLongPolling),
289+
);
286290
_delegate.settings = _delegate.settings.copyWith(
287291
sslEnabled: settings.sslEnabled,
288292
persistenceEnabled: settings.persistenceEnabled,
289293
host: settings.host,
290294
cacheSizeBytes: settings.cacheSizeBytes,
295+
ignoreUndefinedProperties: settings.ignoreUndefinedProperties,
296+
experimentalForceLongPolling: settings.experimentalForceLongPolling,
297+
experimentalAutoDetectLongPolling:
298+
settings.experimentalAutoDetectLongPolling,
291299
);
292300
}
293301

packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/settings.dart

+22-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class Settings {
1717
this.sslEnabled,
1818
this.cacheSizeBytes,
1919
this.ignoreUndefinedProperties = false,
20+
this.experimentalForceLongPolling = false,
21+
this.experimentalAutoDetectLongPolling = false,
2022
});
2123

2224
/// Constant used to indicate the LRU garbage collection should be disabled.
@@ -52,6 +54,11 @@ class Settings {
5254
/// Web only.
5355
final bool ignoreUndefinedProperties;
5456

57+
// https://github.com/firebase/firebase-js-sdk/issues/1674
58+
// https://github.com/firebase/flutterfire/issues/11149#issuecomment-1615133353
59+
final bool experimentalForceLongPolling;
60+
final bool experimentalAutoDetectLongPolling;
61+
5562
/// Returns the settings as a [Map]
5663
Map<String, dynamic> get asMap {
5764
return {
@@ -60,6 +67,9 @@ class Settings {
6067
'sslEnabled': sslEnabled,
6168
'cacheSizeBytes': cacheSizeBytes,
6269
if (kIsWeb) 'ignoreUndefinedProperties': ignoreUndefinedProperties,
70+
if (kIsWeb) 'experimentalForceLongPolling': experimentalForceLongPolling,
71+
if (kIsWeb)
72+
'experimentalAutoDetectLongPolling': experimentalAutoDetectLongPolling,
6373
};
6474
}
6575

@@ -69,6 +79,8 @@ class Settings {
6979
bool? sslEnabled,
7080
int? cacheSizeBytes,
7181
bool? ignoreUndefinedProperties,
82+
bool? experimentalForceLongPolling,
83+
bool? experimentalAutoDetectLongPolling,
7284
}) {
7385
assert(
7486
cacheSizeBytes == null ||
@@ -84,6 +96,10 @@ class Settings {
8496
cacheSizeBytes: cacheSizeBytes ?? this.cacheSizeBytes,
8597
ignoreUndefinedProperties:
8698
ignoreUndefinedProperties ?? this.ignoreUndefinedProperties,
99+
experimentalForceLongPolling:
100+
experimentalForceLongPolling ?? this.experimentalForceLongPolling,
101+
experimentalAutoDetectLongPolling: experimentalAutoDetectLongPolling ??
102+
this.experimentalAutoDetectLongPolling,
87103
);
88104
}
89105

@@ -95,7 +111,10 @@ class Settings {
95111
other.host == host &&
96112
other.sslEnabled == sslEnabled &&
97113
other.cacheSizeBytes == cacheSizeBytes &&
98-
other.ignoreUndefinedProperties == ignoreUndefinedProperties;
114+
other.ignoreUndefinedProperties == ignoreUndefinedProperties &&
115+
other.experimentalForceLongPolling == experimentalForceLongPolling &&
116+
other.experimentalAutoDetectLongPolling ==
117+
experimentalAutoDetectLongPolling;
99118

100119
@override
101120
int get hashCode => Object.hash(
@@ -105,6 +124,8 @@ class Settings {
105124
sslEnabled,
106125
cacheSizeBytes,
107126
ignoreUndefinedProperties,
127+
experimentalForceLongPolling,
128+
experimentalAutoDetectLongPolling,
108129
);
109130

110131
@override

packages/cloud_firestore/cloud_firestore_web/lib/cloud_firestore_web.dart

+8
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,19 @@ class FirebaseFirestoreWeb extends FirebaseFirestorePlatform {
148148
host: settings.host?.toJS,
149149
ssl: settings.sslEnabled?.toJS,
150150
ignoreUndefinedProperties: settings.ignoreUndefinedProperties.toJS,
151+
experimentalForceLongPolling:
152+
settings.experimentalForceLongPolling?.toJS,
153+
experimentalAutoDetectLongPolling:
154+
settings.experimentalAutoDetectLongPolling?.toJS,
151155
);
152156
} else {
153157
_settings = firestore_interop.FirestoreSettings(
154158
localCache: localCache,
155159
ignoreUndefinedProperties: settings.ignoreUndefinedProperties.toJS,
160+
experimentalForceLongPolling:
161+
settings.experimentalForceLongPolling?.toJS,
162+
experimentalAutoDetectLongPolling:
163+
settings.experimentalAutoDetectLongPolling?.toJS,
156164
);
157165
}
158166
}

packages/cloud_firestore/cloud_firestore_web/lib/src/interop/firestore_interop.dart

+8
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,8 @@ abstract class FirestoreSettings {
692692
JSString? host,
693693
JSBoolean? ssl,
694694
JSBoolean? ignoreUndefinedProperties,
695+
JSBoolean? experimentalForceLongPolling,
696+
JSBoolean? experimentalAutoDetectLongPolling,
695697
JSObject localCache,
696698
});
697699
}
@@ -710,6 +712,12 @@ extension FirestoreSettingsExtension on FirestoreSettings {
710712
//ignore: avoid_setters_without_getters
711713
external set ignoreUndefinedProperties(JSBoolean u);
712714

715+
//ignore: avoid_setters_without_getters
716+
external set experimentalForceLongPolling(JSBoolean t);
717+
718+
//ignore: avoid_setters_without_getters
719+
external set experimentalAutoDetectLongPolling(JSBoolean t);
720+
713721
/// Specifies the cache used by the SDK.
714722
/// Available options are MemoryLocalCache and PersistentLocalCache, each with different configuration options.
715723
/// When unspecified, MemoryLocalCache will be used by default.

0 commit comments

Comments
 (0)