Bug report
FirebasePluginPlatform contains dead code. It should be renamed to FirebasePlugin and should not extend PlatformInterface.
Reasoning:
FirebasePluginPlatform.verifyExtends is not ever called. There is no reason for FirebasePluginPlatform to be a PlatformInterface. Having it extend PlatformInterface is fragile because if a method were ever added to FirebasePluginPlatform or PlatformInterface, it could break compatibility with libraries that are using these classes with implements.
Steps to reproduce
class CustomFirebaseAppCheck implements FirebaseAppCheck {
CustomFirebaseAppCheck() { ... }
@override
final FirebaseApp app;
@override
Future<void> activate({String? webRecaptchaSiteKey}) { ... }
@override
Future<String?> getToken([bool? forceRefresh]) { ... }
@override
Future<void> setTokenAutoRefreshEnabled(bool isTokenAutoRefreshEnabled) { ... }
@override
Stream<String?> get onTokenChange { ... }
}
Everything would work initially, but minor updates such as new methods added to FirebasePluginPlatform would cause the plugin to fail to compile.
Expected behavior
- Remove
FirebasePluginPlatform.verifyExtends, which is dead code.
FirebasePluginPlatform should not extend PlatformInterface. Subclasses of PlatformInterface are not part of the app-facing plugin interface.
- Rename
FirebasePluginPlatform to FirebasePlugin. (Optionally, provide a soft-deprecated compatibility shim FirebasePluginPlatform that extends FirebasePlugin so that this isn't a breaking change.) Update every plugin's app-facing class to extend this new FirebasePlugin class. This is to make it clear that the class is exposed to apps, unlike platform classes.
Additional context
Related issues:
#8095
#8096
Bug report
FirebasePluginPlatformcontains dead code. It should be renamed toFirebasePluginand should not extendPlatformInterface.Reasoning:
FirebasePluginPlatform.verifyExtendsis not ever called. There is no reason forFirebasePluginPlatformto be aPlatformInterface. Having it extendPlatformInterfaceis fragile because if a method were ever added toFirebasePluginPlatformorPlatformInterface, it could break compatibility with libraries that are using these classes withimplements.Steps to reproduce
Everything would work initially, but minor updates such as new methods added to
FirebasePluginPlatformwould cause the plugin to fail to compile.Expected behavior
FirebasePluginPlatform.verifyExtends, which is dead code.FirebasePluginPlatformshould not extendPlatformInterface. Subclasses ofPlatformInterfaceare not part of the app-facing plugin interface.FirebasePluginPlatformtoFirebasePlugin. (Optionally, provide a soft-deprecated compatibility shimFirebasePluginPlatformthat extendsFirebasePluginso that this isn't a breaking change.) Update every plugin's app-facing class to extend this newFirebasePluginclass. This is to make it clear that the class is exposed to apps, unlike platform classes.Additional context
Related issues:
#8095
#8096