在 Flutter 联合插件上调用特定平台函数
Call specific platform function on a Flutter federated plugin
我想知道在联合插件上拥有平台特定功能的最佳方式应该是什么以及如何从主应用程序调用它。
让我们看看这个联合插件代码:
- 定义函数的平台接口:
abstract class FlutterGetPlatformStringPlatform extends PlatformInterface {
...
Future<String> getPlatformString() {
throw UnimplementedError();
}
...
}
- Android 实施:
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 等类型
我想知道在联合插件上拥有平台特定功能的最佳方式应该是什么以及如何从主应用程序调用它。
让我们看看这个联合插件代码:
- 定义函数的平台接口:
abstract class FlutterGetPlatformStringPlatform extends PlatformInterface {
...
Future<String> getPlatformString() {
throw UnimplementedError();
}
...
}
- Android 实施:
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 等类型