首页 > 解决方案 > 从 Flutter 的方法通道访问 Kotlin 中的参数数据

问题描述

我在颤振和 Kotlin 中设置了一个基本的方法通道。

以下是我的示例数据:

{    
    "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包含我刚刚发送的数据,出现了两个问题:

  1. 我如何访问数据argdata?例如。

  2. 我如何从中得到我user_dobargData

以下代码是我当前的解决方案。

val userDOB : String = call.argument("user_dob")

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

注意:当我将地图数据发送到 MethodChannel 时,它被意外地作为字符串发送。要遵循方法,请确保在传递数据时实现了 Map 对象。

标签: androidjsonkotlinflutterdart

解决方案


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

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

在您的情况下,您请求了StringKotlin 中的 which 是Nun-nullString 对象,但call.argumentjson 中可能不存在的返回值并且为空。所以你必须得到String?一个Nullable字符串。

更新

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

扑朔迷离:

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

在本机代码中:

val channel = MethodChannel(registrar.messenger(), "NAME");

TL; 博士

在 Kotlin中,对可以为 null 的数据使用Nullable 对象。

val userDOB : String? = call.argument("user_dob")

并与?.(Null safe)一起使用


推荐阅读