Nat*_*hat 14 android aar flutter flutter-dependencies
本指南讨论flutter和原生android之间对话的方法通道。
https://flutter.dev/docs/development/platform-integration/platform-channels
我已经为我的 flutter 模块生成了“aar”文件,并将该 aar 文件包含在我的本机 android 应用程序中。现在,当我单击 Android 应用程序中的按钮时,我将通过 Android 中的 FlutterActivity 类启动我的 flutter 模块。
现在我的问题是,如何在本机 android 代码和生成的 aar 代码之间进一步通信?
如何编写我的 flutter 模块,以便当我生成“aar”文件并包含在我的 android 应用程序中时,我能够在它们之间建立通信?
小智 1
您提到的指南讨论了平台通道以及如何通信(Flutter 端和Android 端)。
就您而言,要在 Flutter 和 Android 之间进行通信,MethodChannel双方都需要一个。
创建 MethodChannel 时,您必须提供一个唯一的名称(通常是您的包域名),以便引擎在您的 Flutter 端和 Android 端之间创建一个通道。
颤振侧:
class MyPlugin {
static const _channel = MethodChannel("example.dev/plugin");
Future<String> getHelloWorld() async {
final message = await _channel.invokeMethod<String>("getHelloWorld");
print(message);
return message;
}
}
Run Code Online (Sandbox Code Playgroud)
Android 端(Kotlin):
class MyPlugin : FlutterPlugin, MethodCallHandler {
private lateinit var channel: MethodChannel
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(binding.binaryMessenger, "example.dev/plugin")
channel.setMethodCallHandler(this)
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
override fun onMethodCall(call: MethodCall, result: Result) {
if (call.method == "getHelloWorld") {
result.success("Hello world!")
return
}
result.notImplemented()
}
}
Run Code Online (Sandbox Code Playgroud)
onMethodCall当您从 Flutter 端调用时,会在 Android 端调用invokeMethod。请注意,您将一个字符串传递给invokeMethod,它将在 Android 端可用call.method,如上面的示例所示。当您需要传递其他参数时,可以使用以下命令:
颤振侧:
// ...
int age = 42;
String message = "This is the way";
String answer = await _channel.invokeMethod<String>("getMessage", <String, Object>{
"age": age,
"message": message
});
print(answer);
// ...
Run Code Online (Sandbox Code Playgroud)
Android 端(Kotlin):
// ...
if (call.method == "getMessage") {
if (!call.hasArgument("age") || !call.hasArgument("message")) {
result.error("MissingArgumentError", "You must provide age and message parameters.", null)
return
}
val age: Int = call.argument<Int>("age")!!
val message: String = call.argument<String>("message")!!
result.success("$message at $age years old")
return
}
// ...
Run Code Online (Sandbox Code Playgroud)
您可以通过 MethodChannel 传递常见类型的数据,请参阅支持的类型列表。
EventChannel同样,您可以在双方之间使用 an来发出事件(也称为 Stream)。
您将在指南中找到更多详细信息,因为它来自官方文档。
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |