【问题标题】:How to pass arguments from Flutter to Kotlin?如何将参数从 Flutter 传递给 Kotlin?
【发布时间】:2018-08-19 11:30:22
【问题描述】:

我已经开始学习 Flutter。我正在尝试使用 MethodChannel 和 MethodCall 与 Android 平台进行通信。我不知道如何将参数传递给 Android 代码。

下面是我的代码。

// dart
void _onClick() async {
    var parameters = {'image':'starry night'};
    await platform.invokeMethod('showToast', new Map.from(parameters));
}


// kotlin
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
    Log.d("MainActivity", ">> ${call.method}, ${call.arguments}")
    when (call.method) {
        "showToast" -> {
        showToast("toast")
    }
    else -> {
        Log.d("MainActivity", "fail");
    }
}

我可以通过我打印的日志消息检查我传递的争论值。 {image=starry night} 但我不知道如何解析为地图对象。

【问题讨论】:

  • 您是否尝试将call.arguments 转换为Map?我不确定你的问题是什么......
  • @StefanGolubović 谢谢val arguments = call.arguments as java.util.HashMap<String, String> 工作正常。

标签: android kotlin flutter


【解决方案1】:

Dart 端(发送数据)

var channel = MethodChannel('foo_channel');
var dataToPass = <String, dynamic>{
  'os': 'Android',
};
await channel.invokeListMethod<String>('methodInJava', dataToPass);

Java 端(接收数据):

if (methodCall.method.equals("methodInJava")) {
    // Get the entire Map.
    HashMap<String, Object> map = (HashMap<String, Object>) methodCall.arguments;
    Log.i("MyTag", "map = " + map); // {os=Android}

    // Or get a specific value.
    String value = methodCall.argument("os");
    Log.i("MyTag", value); // Android
}

【讨论】:

    【解决方案2】:

    颤动

    在 Flutter 方面,您可以通过将参数作为映射包含在 invokeMethod 调用中来传递参数。

    _channel.invokeMethod('showToast', {'text': 'hello world'});
    

    科特林

    在 Kotlin 方面,您可以通过将 call.arguments 转换为 Map 或从 call.argument() 获取特定参数来获取参数。

    override fun onMethodCall(call: MethodCall, result: Result) {
      when (call.method) {
        "showToast" -> {
          val text = call.argument<String>("text") // hello world
          showToast(text)
        }   
      }
    }
    

    【讨论】:

    • 能否请您也显示 Java 代码?有什么例子吗?
    • 我没有 Java 代码,但如果其他人确实可以随意编辑此答案或添加另一个答案。
    猜你喜欢
    • 2020-05-06
    • 2021-09-24
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 2021-02-08
    相关资源
    最近更新 更多