在 Flutter 联合插件上调用特定平台函数

Call specific platform function on a Flutter federated plugin

我想知道在联合插件上拥有平台特定功能的最佳方式应该是什么以及如何从主应用程序调用它。

让我们看看这个联合插件代码:

abstract class FlutterGetPlatformStringPlatform extends PlatformInterface {
...
  Future<String> getPlatformString() {
    throw UnimplementedError();
  }
...
}
abstract class AndroidGetPlatformString extends FlutterGetPlatformStringPlatform {
...
  @override
  Future<String> getPlatformString() {
    // Some native method
  }
...
}
abstract class WebGetPlatformString extends FlutterGetPlatformStringPlatform {
...
  @override
  Future<String> getPlatformString() {
    // Some native method
  }

  String specificNativeVariable = SpecificNativeVariable();
  
  void specificNativeFunction() {
    // More stuff
  }

...
}

所以这里的问题是关于我的应用程序,我在 pubspec.yaml 上导入插件,然后在代码 import 'package:flutter_platform_string_interface/flutter_platform_string_interface.dart'; 上导入插件。那么,我如何才能仅调用网络 specificNativeFunction 或如何将网络设置为仅 SpecificNativeVariable

我应该导入 flutter_platform_string_web,还是我必须如何实例化平台接口?

您可以通过多种方式执行此操作:

  • 如您所示,插件客户端导入 flutter_platform_string_web
  • 使用演示的模式 in the in_app_purchase plugin,插件客户端导入 flutter_platform_string_web。这样做的好处是客户端不需要导入整个平台实现,因此不太可能认为应该直接调用其他平台实现方法(这几乎总是一个坏主意)。
  • 使该方法成为 app-facing 程序包的一部分,并记录它仅在 Web 上实现。这就是 platform-specific 方法在创建联合插件之前的工作方式,但现在并不真正鼓励这种做法。当您使用自己的特定方法添加更多平台时,它无法很好地扩展,不允许使用 platform-specific 等类型