Skip to content

Commit 67017fd

Browse files
authored
feat(firestore)!: remove deprecated functions (#17559)
## Summary Removes all deprecated methods from the cloud_firestore package's front-facing API in preparation for a breaking change release. ## Removed Methods - `databaseURL` parameter/property → Use `databaseId` instead - `enablePersistence()` method → Use `Settings.persistenceEnabled` instead - `setIndexConfiguration()` method → Use `PersistentCacheIndexManager` instead - `enableIndexedDbPersistence()` function → Use `FirestoreSettings.localCache` instead - `cacheSizeBytes` setter → Use `FirestoreSettings.localCache` instead ## Migration Guide ```dart // Before FirebaseFirestore.instanceFor(app: app, databaseURL: 'db'); await firestore.enablePersistence(); await firestore.setIndexConfiguration(indexes: [...]); // After FirebaseFirestore.instanceFor(app: app, databaseId: 'db'); firestore.settings = const Settings(persistenceEnabled: true); final indexManager = firestore.persistentCacheIndexManager(); await indexManager?.enableIndexAutoCreation(); ```
1 parent 3e4302c commit 67017fd

File tree

9 files changed

+9
-220
lines changed

9 files changed

+9
-220
lines changed

packages/cloud_firestore/cloud_firestore/example/integration_test/instance_e2e.dart

Lines changed: 2 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -151,91 +151,6 @@ void runInstanceTests() {
151151
skip: kIsWeb || defaultTargetPlatform == TargetPlatform.windows,
152152
);
153153

154-
test(
155-
'setIndexConfiguration()',
156-
() async {
157-
Index index1 = Index(
158-
collectionGroup: 'bar',
159-
queryScope: QueryScope.collectionGroup,
160-
fields: [
161-
IndexField(
162-
fieldPath: 'fieldPath',
163-
order: Order.ascending,
164-
arrayConfig: ArrayConfig.contains,
165-
),
166-
],
167-
);
168-
169-
Index index2 = Index(
170-
collectionGroup: 'baz',
171-
queryScope: QueryScope.collection,
172-
fields: [
173-
IndexField(
174-
fieldPath: 'foo',
175-
arrayConfig: ArrayConfig.contains,
176-
),
177-
IndexField(
178-
fieldPath: 'bar',
179-
order: Order.descending,
180-
arrayConfig: ArrayConfig.contains,
181-
),
182-
IndexField(
183-
fieldPath: 'baz',
184-
order: Order.descending,
185-
arrayConfig: ArrayConfig.contains,
186-
),
187-
],
188-
);
189-
190-
FieldOverrides fieldOverride1 = FieldOverrides(
191-
fieldPath: 'fieldPath',
192-
indexes: [
193-
FieldOverrideIndex(
194-
queryScope: 'foo',
195-
order: Order.ascending,
196-
arrayConfig: ArrayConfig.contains,
197-
),
198-
FieldOverrideIndex(
199-
queryScope: 'bar',
200-
order: Order.descending,
201-
arrayConfig: ArrayConfig.contains,
202-
),
203-
FieldOverrideIndex(
204-
queryScope: 'baz',
205-
order: Order.descending,
206-
),
207-
],
208-
collectionGroup: 'bar',
209-
);
210-
FieldOverrides fieldOverride2 = FieldOverrides(
211-
fieldPath: 'anotherField',
212-
indexes: [
213-
FieldOverrideIndex(
214-
queryScope: 'foo',
215-
order: Order.ascending,
216-
arrayConfig: ArrayConfig.contains,
217-
),
218-
FieldOverrideIndex(
219-
queryScope: 'bar',
220-
order: Order.descending,
221-
arrayConfig: ArrayConfig.contains,
222-
),
223-
FieldOverrideIndex(
224-
queryScope: 'baz',
225-
order: Order.descending,
226-
),
227-
],
228-
collectionGroup: 'collectiongroup',
229-
);
230-
// ignore_for_file: deprecated_member_use
231-
await firestore.setIndexConfiguration(
232-
indexes: [index1, index2],
233-
fieldOverrides: [fieldOverride1, fieldOverride2],
234-
);
235-
},
236-
skip: defaultTargetPlatform == TargetPlatform.windows,
237-
);
238-
239154
test(
240155
'setIndexConfigurationFromJSON()',
241156
() async {
@@ -372,8 +287,8 @@ void runInstanceTests() {
372287
databaseId: 'web-disabled-2',
373288
);
374289

375-
// Now try using `enablePersistence()`, web only API
376-
await firestore2.enablePersistence();
290+
// Enable persistence using settings instead of deprecated enablePersistence()
291+
firestore2.settings = const Settings(persistenceEnabled: true);
377292

378293
PersistentCacheIndexManager? indexManager2 =
379294
firestore2.persistentCacheIndexManager();

packages/cloud_firestore/cloud_firestore/lib/cloud_firestore.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'dart:convert';
6-
// TODO(Lyokone): remove once we bump Flutter SDK min version to 3.3
7-
// ignore: unnecessary_import
8-
import 'dart:typed_data';
9-
105
import 'package:cloud_firestore_platform_interface/cloud_firestore_platform_interface.dart';
116
import 'package:firebase_core/firebase_core.dart';
127
import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart'

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

Lines changed: 2 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ part of '../cloud_firestore.dart';
1818
class FirebaseFirestore extends FirebasePluginPlatform {
1919
FirebaseFirestore._({
2020
required this.app,
21-
@Deprecated(
22-
'`databaseURL` has been deprecated. Please use `databaseId` instead.',
23-
)
24-
required this.databaseURL,
2521
required this.databaseId,
2622
}) : super(app.name, 'plugins.flutter.io/firebase_firestore');
2723

@@ -37,23 +33,16 @@ class FirebaseFirestore extends FirebasePluginPlatform {
3733
/// Returns an instance using a specified [FirebaseApp].
3834
static FirebaseFirestore instanceFor({
3935
required FirebaseApp app,
40-
@Deprecated(
41-
'`databaseURL` has been deprecated. Please use `databaseId` instead.',
42-
)
43-
String? databaseURL,
4436
String? databaseId,
4537
}) {
46-
String firestoreDatabaseId = databaseId ?? databaseURL ?? '(default)';
38+
String firestoreDatabaseId = databaseId ?? '(default)';
4739
String cacheKey = '${app.name}|$firestoreDatabaseId';
4840
if (_cachedInstances.containsKey(cacheKey)) {
4941
return _cachedInstances[cacheKey]!;
5042
}
5143

52-
FirebaseFirestore newInstance =
53-
// Both databaseURL and databaseId are required so we have to pass both for now. We can remove databaseURL in a future release.
54-
FirebaseFirestore._(
44+
FirebaseFirestore newInstance = FirebaseFirestore._(
5545
app: app,
56-
databaseURL: firestoreDatabaseId,
5746
databaseId: firestoreDatabaseId,
5847
);
5948
_cachedInstances[cacheKey] = newInstance;
@@ -76,13 +65,6 @@ class FirebaseFirestore extends FirebasePluginPlatform {
7665
/// The [FirebaseApp] for this current [FirebaseFirestore] instance.
7766
FirebaseApp app;
7867

79-
/// Firestore Database ID for this instance. Falls back to default database: "(default)"
80-
/// This is deprecated in favor of [databaseId].
81-
@Deprecated(
82-
'`databaseURL` has been deprecated. Please use `databaseId` instead.',
83-
)
84-
String databaseURL;
85-
8668
/// Firestore Database ID for this instance. Falls back to default database: "(default)"
8769
String databaseId;
8870

@@ -124,17 +106,6 @@ class FirebaseFirestore extends FirebasePluginPlatform {
124106
return _delegate.clearPersistence();
125107
}
126108

127-
/// Enable persistence of Firestore data for web-only. Use [Settings.persistenceEnabled] for non-web platforms.
128-
/// If `enablePersistence()` is not called, it defaults to Memory cache.
129-
/// If `enablePersistence(const PersistenceSettings(synchronizeTabs: false))` is called, it persists data for a single browser tab.
130-
/// If `enablePersistence(const PersistenceSettings(synchronizeTabs: true))` is called, it persists data across multiple browser tabs.
131-
@Deprecated('Use Settings.persistenceEnabled instead.')
132-
Future<void> enablePersistence([
133-
PersistenceSettings? persistenceSettings,
134-
]) async {
135-
return _delegate.enablePersistence(persistenceSettings);
136-
}
137-
138109
LoadBundleTask loadBundle(Uint8List bundle) {
139110
return LoadBundleTask._(_delegate.loadBundle(bundle));
140111
}
@@ -351,31 +322,6 @@ class FirebaseFirestore extends FirebasePluginPlatform {
351322
return _delegate.waitForPendingWrites();
352323
}
353324

354-
/// Configures indexing for local query execution. Any previous index configuration is overridden.
355-
///
356-
/// The index entries themselves are created asynchronously. You can continue to use queries that
357-
/// require indexing even if the indices are not yet available. Query execution will automatically
358-
/// start using the index once the index entries have been written.
359-
///
360-
/// This API is now deprecated
361-
@Deprecated(
362-
'setIndexConfiguration() has been deprecated. Please use `PersistentCacheIndexManager` instead.',
363-
)
364-
Future<void> setIndexConfiguration({
365-
required List<Index> indexes,
366-
List<FieldOverrides>? fieldOverrides,
367-
}) async {
368-
String json = jsonEncode(
369-
{
370-
'indexes': indexes.map((index) => index.toMap()).toList(),
371-
'fieldOverrides':
372-
fieldOverrides?.map((index) => index.toMap()).toList() ?? [],
373-
},
374-
);
375-
376-
return _delegate.setIndexConfiguration(json);
377-
}
378-
379325
PersistentCacheIndexManager? persistentCacheIndexManager() {
380326
if (defaultTargetPlatform == TargetPlatform.windows) {
381327
throw UnimplementedError(

packages/cloud_firestore/cloud_firestore/test/cloud_firestore_test.dart

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,34 +40,25 @@ void main() {
4040
);
4141
});
4242

43-
test('databaseId and databaseURL', () {
43+
test('databaseId', () {
4444
final firestore = FirebaseFirestore.instanceFor(
45-
// ignore: deprecated_member_use_from_same_package
46-
app: Firebase.app(), databaseURL: 'foo',
45+
app: Firebase.app(),
46+
databaseId: 'foo',
4747
);
4848

49-
// ignore: deprecated_member_use_from_same_package
50-
expect(firestore.databaseURL, equals('foo'));
51-
5249
expect(firestore.databaseId, equals('foo'));
5350

5451
final firestore2 =
5552
FirebaseFirestore.instanceFor(app: Firebase.app(), databaseId: 'bar');
5653

57-
// ignore: deprecated_member_use_from_same_package
58-
expect(firestore2.databaseURL, equals('bar'));
59-
6054
expect(firestore2.databaseId, equals('bar'));
6155

6256
final firestore3 = FirebaseFirestore.instanceFor(
63-
// ignore: deprecated_member_use_from_same_package
64-
app: Firebase.app(), databaseId: 'fire', databaseURL: 'not-this',
57+
app: Firebase.app(),
58+
databaseId: 'fire',
6559
);
6660

67-
// databaseId should take precedence
6861
expect(firestore3.databaseId, equals('fire'));
69-
// ignore: deprecated_member_use_from_same_package
70-
expect(firestore3.databaseURL, equals('fire'));
7162
});
7263

7364
test('returns the correct $FirebaseApp', () {

packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/method_channel_firestore.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,6 @@ class MethodChannelFirebaseFirestore extends FirebaseFirestorePlatform {
144144
}
145145
}
146146

147-
@override
148-
Future<void> enablePersistence(
149-
[PersistenceSettings? persistenceSettings]) async {
150-
throw UnimplementedError(
151-
'enablePersistence() is only available for Web. Use [Settings.persistenceEnabled] for other platforms.');
152-
}
153-
154147
@override
155148
CollectionReferencePlatform collection(String collectionPath) {
156149
return MethodChannelCollectionReference(this, collectionPath, pigeonApp);

packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/platform_interface/platform_interface_firestore.dart

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,6 @@ abstract class FirebaseFirestorePlatform extends PlatformInterface {
9999
throw UnimplementedError('clearPersistence() is not implemented');
100100
}
101101

102-
/// Enable persistence of Firestore data for web-only. Use [Settings.persistenceEnabled] for non-web platforms.
103-
/// If `enablePersistence()` is not called, it defaults to Memory cache.
104-
/// If `enablePersistence(const PersistenceSettings(synchronizeTabs: false))` is called, it persists data for a single browser tab.
105-
/// If `enablePersistence(const PersistenceSettings(synchronizeTabs: true))` is called, it persists data across multiple browser tabs.
106-
Future<void> enablePersistence(
107-
[PersistenceSettings? persistenceSettings]) async {
108-
throw UnimplementedError('enablePersistence() is not implemented');
109-
}
110-
111102
/// Gets a [CollectionReferencePlatform] for the specified Firestore path.
112103
CollectionReferencePlatform collection(String collectionPath) {
113104
throw UnimplementedError('collection() is not implemented');

packages/cloud_firestore/cloud_firestore_web/lib/cloud_firestore_web.dart

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -189,22 +189,6 @@ class FirebaseFirestoreWeb extends FirebaseFirestorePlatform {
189189
}
190190
}
191191

192-
/// Enable persistence of Firestore data.
193-
@override
194-
Future<void> enablePersistence([PersistenceSettings? persistenceSettings]) {
195-
_settings = _settings.copyWith(persistenceEnabled: true);
196-
if (persistenceSettings != null) {
197-
firestore_interop.PersistenceSettings interopSettings =
198-
firestore_interop.PersistenceSettings(
199-
synchronizeTabs: persistenceSettings.synchronizeTabs.toJS);
200-
201-
return convertWebExceptions(
202-
() => _delegate.enablePersistence(interopSettings));
203-
}
204-
205-
return convertWebExceptions(_delegate.enablePersistence);
206-
}
207-
208192
@override
209193
Future<void> terminate() {
210194
return convertWebExceptions(_delegate.terminate);

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,6 @@ class Firestore extends JsObjectWrapper<firestore_interop.FirestoreJsImpl> {
8686
DocumentReference doc(String documentPath) => DocumentReference.getInstance(
8787
firestore_interop.doc(jsObject as JSAny, documentPath.toJS));
8888

89-
Future<void> enablePersistence(
90-
[firestore_interop.PersistenceSettings? settings]) {
91-
if (settings != null && settings.synchronizeTabs.toDart == true) {
92-
return firestore_interop
93-
.enableMultiTabIndexedDbPersistence(jsObject)
94-
.toDart;
95-
}
96-
return
97-
// ignore: deprecated_member_use_from_same_package
98-
firestore_interop.enableIndexedDbPersistence(jsObject).toDart;
99-
}
100-
10189
// purely for debug mode and tracking listeners to clean up on "hot restart"
10290
static final Map<String, int> _snapshotInSyncListeners = {};
10391
String _snapshotInSyncWindowsKey() {

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,6 @@ external DocumentReferenceJsImpl doc(
111111
@staticInterop
112112
external FieldPath documentId();
113113

114-
@JS()
115-
@staticInterop
116-
@Deprecated(
117-
'This function will be removed in a future major release. Instead, set FirestoreSettings.localCache to an instance of PersistentLocalCache to turn on IndexedDb cache.',
118-
)
119-
external JSPromise enableIndexedDbPersistence(
120-
FirestoreJsImpl firestore, [
121-
PersistenceSettings? settings,
122-
]);
123-
124114
@JS()
125115
@staticInterop
126116
external JSPromise enableMultiTabIndexedDbPersistence(
@@ -743,10 +733,6 @@ abstract class FirestoreSettings {
743733
}
744734

745735
extension FirestoreSettingsExtension on FirestoreSettings {
746-
@Deprecated('Use FirestoreSettings.localCache instead.')
747-
//ignore: avoid_setters_without_getters
748-
external set cacheSizeBytes(JSNumber i);
749-
750736
//ignore: avoid_setters_without_getters
751737
external set host(JSString h);
752738

0 commit comments

Comments
 (0)