我已经在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/