# plugin_platform_interface

This package provides a base class for platform interfaces of [federated flutter plugins](https://flutter.dev/go/federated-plugins).

Platform implementations should extend their platform interface classes rather than implement it as
newly added methods to platform interfaces are not considered as breaking changes. Extending a platform
interface ensures that subclasses will get the default implementations from the base class, while
platform implementations that `implements` their platform interface will be broken by newly added methods.

This class package provides common functionality for platform interface to enforce that they are extended
and not implemented.

## Sample usage:

```dart
abstract class UrlLauncherPlatform extends PlatformInterface {
  UrlLauncherPlatform() : super(token: _token);

  static UrlLauncherPlatform _instance = MethodChannelUrlLauncher();

  static final Object _token = Object();

  static UrlLauncherPlatform get instance => _instance;

  /// Platform-specific plugins should set this with their own platform-specific
  /// class that extends [UrlLauncherPlatform] when they register themselves.
  static set instance(UrlLauncherPlatform instance) {
    PlatformInterface.verifyToken(instance, _token);
    _instance = instance;
  }

 }
```

This guarantees that UrlLauncherPlatform.instance cannot be set to an object that `implements`
UrlLauncherPlatform (it can only be set to an object that `extends` UrlLauncherPlatform).

## Mocking platform interfaces with Mockito


Mockito mocks of platform interfaces will fail the verification done by `verifyToken`.
This package provides a `MockPlatformInterfaceMixin` which can be used in test code only to disable
the `extends` enforcement.

A Mockito mock of a platform interface can be created with:

```dart
class UrlLauncherPlatformMock extends Mock
   with MockPlatformInterfaceMixin
   implements UrlLauncherPlatform {}
```
