1

我正在尝试制作一个用于身份验证的插件。对于不同平台的不同现有包,它将充当“包装器”(但每个插件都有附加功能)。

我的意思是附加功能

  • Web 实现已经有状态管理
  • Android实现是AppAuth,所以这里需要添加自己的状态管理

我正在尝试使用这种PlatformInterface方式,但我找不到任何指南如何使用构造函数参数使其可实例化。

假设我有这个代码:

abstract class KeycloakAuth extends PlatformInterface {
  KeycloakAuth()
    : super(token: _token);

  static final Object _token = Object();

  static late KeycloakAuth _instance = KeycloakAuth._setPlatform();
  static KeycloakAuth get instance => _instance;

  static set platform(KeycloakAuth instance) {
    PlatformInterface.verifyToken(instance, _token);
    _instance = instance;
  }

  factory KeycloakAuth._setPlatform() {
    if (Platform.isAndroid) {
      return KeycloakAuthAppAuth();
    } else {
      throw UnimplementedError('The current platform ${Platform.operatingSystem} is not supported.');
    }
  }
}

这可行,但在我的应用程序中,我想这样做:

final _keycloakAuth = KeycloakAuth(keycloakUrl: 'xxx', clientId: 'yyy');

如果我只是尝试添加这样的参数:

abstract class KeycloakAuth extends PlatformInterface {
  final String keycloakUrl;
  final String clientId;

  KeycloakAuth({
    required this.keycloakUrl,
    required this.clientId,
  })
    : super(token: _token);
...

_setPlatform()因为这是静态方法,所以我无法在方法中传递它们。

KeycloakAuthAppAuthextends KeycloakAuth,所以我需要来回传递这些参数,比如 instantiate KeycloakAuth,这KeycloakAuthAppAuth需要通过super()...

对此有什么建议吗?

我知道我可以initialize({String keycloakUrl, String clientId})使用我的参数创建一个方法,但我仍然想知道是否可以使用构造函数创建它。

4

0 回答 0