我已经在flutter和Kotlin中设置了一个基本的Method通道。

以下是我的示例数据:

{
    "user_dob":"15 November 1997",
    "user_description":"Hello there, I am a User!",
    "user_gender":"Male",
    "user_session":"KKDSH3G9OJKJFIHXLJXUGWIOG9UJKLJ98WHIJ"
}

以下方法通道可以将数据从Flutter传递到Kotlin端:
var result = await platform.invokeMethod('updateProfile', data);

以下代码捕获Kotlin中的数据:
MethodChannel(flutterView, channel).setMethodCallHandler { call, result ->
      if(call.method == "updateProfile"){
        var argData = call.arguments
...

现在,argData包含我刚刚发送的数据,
然后出现两个问题:
  • 如何从argdata访问数据?例如
  • 如何从该user_dob获取我的argData

  • 以下代码是我当前的解决方案。
    val userDOB : String = call.argument("user_dob")
    

    但是会引发以下错误:Kotlin: Type mismatch: inferred type is String? but String was expected

    最佳答案

    从Flutter的方法通道获取方法参数时,传入的数据是json格式的String。

    您可以简单地调用call.argument,它将返回一个可空字符串。

    在您的情况下,您请求的String在Kotlin中是Nun-null字符串对象,但是call.argument的返回值可能在json中不存在,并且为null。因此,您必须获取一个String?字符串,而不是Nullable字符串。

    更新

    检查并确保通道能够将数据传递到本机。

    在 flutter 打中:

    static const MethodChannel _channel = const MethodChannel('NAME');
    

    并在本机代码中:
    val channel = MethodChannel(registrar.messenger(), "NAME");
    

    TL; DR

    在Kotlin中,使用可空对象表示可以为空的数据。
    val userDOB : String? = call.argument("user_dob")
    

    并与?.一起使用(空安全)

    关于android - 从Flutter的Method channel 访问Kotlin中的参数数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59016157/

    10-09 04:16
    查看更多