diff --git a/packages/firebase_database/firebase_database/android/src/main/kotlin/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.kt b/packages/firebase_database/firebase_database/android/src/main/kotlin/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.kt index 80c7ae0bef23..d3929bd95947 100644 --- a/packages/firebase_database/firebase_database/android/src/main/kotlin/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.kt +++ b/packages/firebase_database/firebase_database/android/src/main/kotlin/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.kt @@ -516,7 +516,9 @@ class FirebaseDatabasePlugin : override fun setPersistenceEnabled(app: DatabasePigeonFirebaseApp, enabled: Boolean, callback: (KotlinResult) -> Unit) { try { val database = getDatabaseFromPigeonApp(app) - database.setPersistenceEnabled(enabled) + if (app.settings.persistenceEnabled == null) { + database.setPersistenceEnabled(enabled) + } callback(KotlinResult.success(Unit)) } catch (e: Exception) { callback(KotlinResult.failure(e)) @@ -526,7 +528,9 @@ class FirebaseDatabasePlugin : override fun setPersistenceCacheSizeBytes(app: DatabasePigeonFirebaseApp, cacheSize: Long, callback: (KotlinResult) -> Unit) { try { val database = getDatabaseFromPigeonApp(app) - database.setPersistenceCacheSizeBytes(cacheSize) + if (app.settings.cacheSizeBytes == null) { + database.setPersistenceCacheSizeBytes(cacheSize) + } callback(KotlinResult.success(Unit)) } catch (e: Exception) { callback(KotlinResult.failure(e)) diff --git a/tests/integration_test/firebase_database/firebase_database_configuration_e2e.dart b/tests/integration_test/firebase_database/firebase_database_configuration_e2e.dart index 7cb4b66344da..7fe19f95c25b 100644 --- a/tests/integration_test/firebase_database/firebase_database_configuration_e2e.dart +++ b/tests/integration_test/firebase_database/firebase_database_configuration_e2e.dart @@ -2,8 +2,11 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_database/firebase_database.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:tests/firebase_options.dart'; import 'firebase_database_e2e_test.dart'; @@ -37,5 +40,31 @@ void setupConfigurationTests() { test('setLoggingEnabled to false', () { database.setLoggingEnabled(false); }); + + test( + 'setPersistenceEnabled can be followed immediately by goOnline', + () async { + for (var i = 0; i < 5; i++) { + final app = await Firebase.initializeApp( + name: + 'firebase-database-persistence-${DateTime.now().microsecondsSinceEpoch}-$i', + options: DefaultFirebaseOptions.currentPlatform, + ); + addTearDown(app.delete); + + final database = FirebaseDatabase.instanceFor(app: app); + + database.setPersistenceEnabled(true); + await database.goOnline(); + + await database.ref('persistence-enabled-regression').keepSynced(true); + await database + .ref('persistence-enabled-regression') + .keepSynced(false); + await database.goOffline(); + } + }, + skip: kIsWeb || defaultTargetPlatform != TargetPlatform.android, + ); }); }