diff --git a/packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart b/packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart index 14ace2d8e83f..bd796f2e39f4 100644 --- a/packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart +++ b/packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart @@ -17,9 +17,7 @@ part of cloud_firestore; /// ``` class FirebaseFirestore extends FirebasePluginPlatform { FirebaseFirestore._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_firestore') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_firestore'); static final Map _cachedInstances = {}; diff --git a/packages/cloud_functions/cloud_functions/lib/src/firebase_functions.dart b/packages/cloud_functions/cloud_functions/lib/src/firebase_functions.dart index 2c1a0275e626..732b5f07296d 100644 --- a/packages/cloud_functions/cloud_functions/lib/src/firebase_functions.dart +++ b/packages/cloud_functions/cloud_functions/lib/src/firebase_functions.dart @@ -11,9 +11,7 @@ part of cloud_functions; class FirebaseFunctions extends FirebasePluginPlatform { FirebaseFunctions._({required this.app, String? region}) : _region = region ??= 'us-central1', - super(app.name, 'plugins.flutter.io/firebase_functions') { - FirebasePluginPlatform.verify(instance); - } + super(app.name, 'plugins.flutter.io/firebase_functions'); // Cached and lazily loaded instance of [FirebaseFunctionsPlatform] to avoid // creating a [MethodChannelFirebaseFunctions] when not needed or creating an diff --git a/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart b/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart index 5fb6bde5442a..621e8cbae759 100755 --- a/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart +++ b/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart @@ -7,9 +7,7 @@ part of firebase_analytics; /// Firebase Analytics API. class FirebaseAnalytics extends FirebasePluginPlatform { FirebaseAnalytics._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_analytics') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_analytics'); /// Namespace for analytics API available on Android only. This is deprecated in favor of /// `FirebaseAnalytics.instance.setSessionTimeoutDuration()`. diff --git a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart index 7c632be9698d..12abdca99bed 100644 --- a/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart +++ b/packages/firebase_app_check/firebase_app_check/lib/src/firebase_app_check.dart @@ -9,9 +9,7 @@ class FirebaseAppCheck extends FirebasePluginPlatform { static Map _firebaseAppCheckInstances = {}; FirebaseAppCheck._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_app_check') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_app_check'); /// Cached instance of [FirebaseAppCheck]; static FirebaseAppCheck? _instance; diff --git a/packages/firebase_app_installations/firebase_app_installations/lib/src/firebase_app_installations.dart b/packages/firebase_app_installations/firebase_app_installations/lib/src/firebase_app_installations.dart index f62ca4179024..443946d7c06f 100644 --- a/packages/firebase_app_installations/firebase_app_installations/lib/src/firebase_app_installations.dart +++ b/packages/firebase_app_installations/firebase_app_installations/lib/src/firebase_app_installations.dart @@ -6,9 +6,7 @@ part of firebase_app_installations; class FirebaseInstallations extends FirebasePluginPlatform { FirebaseInstallations._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_app_installations') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_app_installations'); // Cached and lazily loaded instance of [FirebaseAppInstallationsPlatform] to avoid // creating a [MethodChannelFirebaseInstallations] when not needed or creating an diff --git a/packages/firebase_auth/firebase_auth/lib/src/firebase_auth.dart b/packages/firebase_auth/firebase_auth/lib/src/firebase_auth.dart index 44ded36b36d2..22f0f226e4b0 100644 --- a/packages/firebase_auth/firebase_auth/lib/src/firebase_auth.dart +++ b/packages/firebase_auth/firebase_auth/lib/src/firebase_auth.dart @@ -37,9 +37,7 @@ class FirebaseAuth extends FirebasePluginPlatform { FirebaseAuth._({required this.app, Persistence? persistence}) : _persistence = persistence, - super(app.name, 'plugins.flutter.io/firebase_auth') { - FirebasePluginPlatform.verify(instance); - } + super(app.name, 'plugins.flutter.io/firebase_auth'); /// Returns an instance using the default [FirebaseApp]. static FirebaseAuth get instance { diff --git a/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_recaptcha_verifier_factory.dart b/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_recaptcha_verifier_factory.dart index 65fb3241aae6..7a3befbc7ff2 100644 --- a/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_recaptcha_verifier_factory.dart +++ b/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_recaptcha_verifier_factory.dart @@ -66,7 +66,7 @@ abstract class RecaptchaVerifierFactoryPlatform extends PlatformInterface { } /// Ensures that a delegate class extends [RecaptchaVerifierFactoryPlatform]. - static void verify(RecaptchaVerifierFactoryPlatform instance) { + static void verifyExtends(RecaptchaVerifierFactoryPlatform instance) { PlatformInterface.verify(instance, _token); } diff --git a/packages/firebase_auth/firebase_auth_platform_interface/test/platform_interface_tests/platform_interface_recaptcha_verifier_factory_test.dart b/packages/firebase_auth/firebase_auth_platform_interface/test/platform_interface_tests/platform_interface_recaptcha_verifier_factory_test.dart index a33a1b365049..1e538d219237 100644 --- a/packages/firebase_auth/firebase_auth_platform_interface/test/platform_interface_tests/platform_interface_recaptcha_verifier_factory_test.dart +++ b/packages/firebase_auth/firebase_auth_platform_interface/test/platform_interface_tests/platform_interface_recaptcha_verifier_factory_test.dart @@ -46,7 +46,7 @@ void main() { group('verify()', () { test('calls successfully', () { try { - RecaptchaVerifierFactoryPlatform.verify( + RecaptchaVerifierFactoryPlatform.verifyExtends( recaptchaVerifierFactoryPlatform); return; } catch (_) { diff --git a/packages/firebase_crashlytics/firebase_crashlytics/lib/src/firebase_crashlytics.dart b/packages/firebase_crashlytics/firebase_crashlytics/lib/src/firebase_crashlytics.dart index f19f369c2f69..3eb14f6009cd 100644 --- a/packages/firebase_crashlytics/firebase_crashlytics/lib/src/firebase_crashlytics.dart +++ b/packages/firebase_crashlytics/firebase_crashlytics/lib/src/firebase_crashlytics.dart @@ -10,9 +10,7 @@ part of firebase_crashlytics; /// You can get an instance by calling [FirebaseCrashlytics.instance]. class FirebaseCrashlytics extends FirebasePluginPlatform { FirebaseCrashlytics._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_crashlytics') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_crashlytics'); /// Cached instance of [FirebaseCrashlytics]; static FirebaseCrashlytics? _instance; @@ -33,7 +31,6 @@ class FirebaseCrashlytics extends FirebasePluginPlatform { /// Returns an instance using the default [FirebaseApp]. static FirebaseCrashlytics get instance { _instance ??= FirebaseCrashlytics._(app: Firebase.app()); - return _instance!; } diff --git a/packages/firebase_database/firebase_database/lib/src/firebase_database.dart b/packages/firebase_database/firebase_database/lib/src/firebase_database.dart index cc8f8e2e589b..1a1373b6bd0e 100644 --- a/packages/firebase_database/firebase_database/lib/src/firebase_database.dart +++ b/packages/firebase_database/firebase_database/lib/src/firebase_database.dart @@ -21,7 +21,6 @@ class FirebaseDatabase extends FirebasePluginPlatform { FirebaseDatabase._({required this.app, this.databaseURL}) : super(app.name, 'plugins.flutter.io/firebase_database') { - FirebasePluginPlatform.verify(instance); if (databaseURL != null && databaseURL!.endsWith('/')) { databaseURL = databaseURL!.substring(0, databaseURL!.length - 1); } diff --git a/packages/firebase_database/firebase_database/lib/src/query.dart b/packages/firebase_database/firebase_database/lib/src/query.dart index c34e537f624a..e0312687a50d 100644 --- a/packages/firebase_database/firebase_database/lib/src/query.dart +++ b/packages/firebase_database/firebase_database/lib/src/query.dart @@ -7,7 +7,9 @@ part of firebase_database; /// Represents a query over the data at a particular location. class Query { Query._(this._queryDelegate, [QueryModifiers? modifiers]) - : _modifiers = modifiers ?? QueryModifiers([]); + : _modifiers = modifiers ?? QueryModifiers([]) { + QueryPlatform.verify(_queryDelegate); + } final QueryPlatform _queryDelegate; diff --git a/packages/firebase_database/firebase_database_platform_interface/lib/src/platform_interface/platform_interface_query.dart b/packages/firebase_database/firebase_database_platform_interface/lib/src/platform_interface/platform_interface_query.dart index 2c3204d2b446..157e9b7eee10 100755 --- a/packages/firebase_database/firebase_database_platform_interface/lib/src/platform_interface/platform_interface_query.dart +++ b/packages/firebase_database/firebase_database_platform_interface/lib/src/platform_interface/platform_interface_query.dart @@ -12,6 +12,16 @@ abstract class QueryPlatform extends PlatformInterface { static final Object _token = Object(); + /// Throws an [AssertionError] if [instance] does not extend + /// [QueryPlatform]. + /// + /// This is used by the app-facing [Query] to ensure that + /// the object in which it's going to delegate calls has been + /// constructed properly. + static void verify(QueryPlatform instance) { + PlatformInterface.verify(instance, _token); + } + /// Create a [QueryPlatform] instance QueryPlatform({ required this.database, diff --git a/packages/firebase_dynamic_links/firebase_dynamic_links/lib/src/firebase_dynamic_links.dart b/packages/firebase_dynamic_links/firebase_dynamic_links/lib/src/firebase_dynamic_links.dart index 5f4c17fcc4cf..034fea588e0e 100644 --- a/packages/firebase_dynamic_links/firebase_dynamic_links/lib/src/firebase_dynamic_links.dart +++ b/packages/firebase_dynamic_links/firebase_dynamic_links/lib/src/firebase_dynamic_links.dart @@ -9,9 +9,7 @@ part of firebase_dynamic_links; /// You can get an instance by calling [FirebaseDynamicLinks.instance]. class FirebaseDynamicLinks extends FirebasePluginPlatform { FirebaseDynamicLinks._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_dynamic_links') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_dynamic_links'); static final Map _cachedInstances = {}; diff --git a/packages/firebase_in_app_messaging/firebase_in_app_messaging/lib/firebase_in_app_messaging.dart b/packages/firebase_in_app_messaging/firebase_in_app_messaging/lib/firebase_in_app_messaging.dart index 4a2a68bca5da..857c0f25c376 100644 --- a/packages/firebase_in_app_messaging/firebase_in_app_messaging/lib/firebase_in_app_messaging.dart +++ b/packages/firebase_in_app_messaging/firebase_in_app_messaging/lib/firebase_in_app_messaging.dart @@ -9,9 +9,7 @@ import 'package:firebase_in_app_messaging_platform_interface/firebase_in_app_mes class FirebaseInAppMessaging extends FirebasePluginPlatform { FirebaseInAppMessaging._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_in_app_messaging') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_in_app_messaging'); /// The [FirebaseApp] for this current [FirebaseAnalytics] instance. final FirebaseApp app; diff --git a/packages/firebase_messaging/firebase_messaging/lib/src/messaging.dart b/packages/firebase_messaging/firebase_messaging/lib/src/messaging.dart index 9d1daf4539f1..c1bd9ce38f4b 100644 --- a/packages/firebase_messaging/firebase_messaging/lib/src/messaging.dart +++ b/packages/firebase_messaging/firebase_messaging/lib/src/messaging.dart @@ -25,9 +25,7 @@ class FirebaseMessaging extends FirebasePluginPlatform { FirebaseApp app; FirebaseMessaging._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_messaging') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_messaging'); /// Returns an instance using the default [FirebaseApp]. static FirebaseMessaging get instance { diff --git a/packages/firebase_ml_model_downloader/firebase_ml_model_downloader/lib/src/firebase_ml_model_downloader.dart b/packages/firebase_ml_model_downloader/firebase_ml_model_downloader/lib/src/firebase_ml_model_downloader.dart index 7a3ed559dd3b..f5661a9ca0d3 100644 --- a/packages/firebase_ml_model_downloader/firebase_ml_model_downloader/lib/src/firebase_ml_model_downloader.dart +++ b/packages/firebase_ml_model_downloader/firebase_ml_model_downloader/lib/src/firebase_ml_model_downloader.dart @@ -6,9 +6,7 @@ part of firebase_ml_model_downloader; class FirebaseModelDownloader extends FirebasePluginPlatform { FirebaseModelDownloader._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_ml_model_downloader') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_ml_model_downloader'); // Cached and lazily loaded instance of [FirebaseModelDownloaderPlatform] to avoid // creating a [MethodChannelFirebaseFunctions] when not needed or creating an diff --git a/packages/firebase_performance/firebase_performance/lib/src/firebase_performance.dart b/packages/firebase_performance/firebase_performance/lib/src/firebase_performance.dart index dada0c9fbc87..a26fd2454a7c 100644 --- a/packages/firebase_performance/firebase_performance/lib/src/firebase_performance.dart +++ b/packages/firebase_performance/firebase_performance/lib/src/firebase_performance.dart @@ -9,9 +9,7 @@ part of firebase_performance; /// You can get an instance by calling [FirebasePerformance.instance]. class FirebasePerformance extends FirebasePluginPlatform { FirebasePerformance._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_performance') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_performance'); // Cached and lazily loaded instance of [FirebasePerformancePlatform] to avoid // creating a [MethodChannelFirebasePerformance] when not needed or creating an diff --git a/packages/firebase_remote_config/firebase_remote_config/lib/src/firebase_remote_config.dart b/packages/firebase_remote_config/firebase_remote_config/lib/src/firebase_remote_config.dart index 3667731bc350..d07d072c3045 100644 --- a/packages/firebase_remote_config/firebase_remote_config/lib/src/firebase_remote_config.dart +++ b/packages/firebase_remote_config/firebase_remote_config/lib/src/firebase_remote_config.dart @@ -11,9 +11,7 @@ part of firebase_remote_config; // ignore: prefer_mixin class FirebaseRemoteConfig extends FirebasePluginPlatform with ChangeNotifier { FirebaseRemoteConfig._({required this.app}) - : super(app.name, 'plugins.flutter.io/firebase_remote_config') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_remote_config'); // Cached instances of [FirebaseRemoteConfig]. static final Map @@ -39,7 +37,9 @@ class FirebaseRemoteConfig extends FirebasePluginPlatform with ChangeNotifier { /// Returns an instance using the specified [FirebaseApp]. static FirebaseRemoteConfig instanceFor({required FirebaseApp app}) { return _firebaseRemoteConfigInstances.putIfAbsent(app.name, () { - return FirebaseRemoteConfig._(app: app); + final instance = FirebaseRemoteConfig._(app: app); + FirebasePluginPlatform.verify(instance); + return instance; }); } diff --git a/packages/firebase_storage/firebase_storage/lib/src/firebase_storage.dart b/packages/firebase_storage/firebase_storage/lib/src/firebase_storage.dart index a8da0739c390..d8521b3b335d 100644 --- a/packages/firebase_storage/firebase_storage/lib/src/firebase_storage.dart +++ b/packages/firebase_storage/firebase_storage/lib/src/firebase_storage.dart @@ -8,9 +8,7 @@ part of firebase_storage; /// The entrypoint for [FirebaseStorage]. class FirebaseStorage extends FirebasePluginPlatform { FirebaseStorage._({required this.app, required this.bucket}) - : super(app.name, 'plugins.flutter.io/firebase_storage') { - FirebasePluginPlatform.verify(instance); - } + : super(app.name, 'plugins.flutter.io/firebase_storage'); // Cached and lazily loaded instance of [FirebaseStoragePlatform] to avoid // creating a [MethodChannelStorage] when not needed or creating an