我已经在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
注意:当我将地图数据发送到MethodChannel时,它被意外地作为字符串发送。要遵循 THIS 方法,请确保在传递数据时实现了Map对象。
答案 0 :(得分:3)
从Flutter的方法通道获取方法参数时,传入的数据是json格式的字符串。
您只需调用call.argument
,它就会返回一个 Nullable 字符串。
在您的情况下,您请求的String
在Kotlin中是Nun-null
字符串对象,但是返回的call.argument
值在json中可能不存在,并且为空。因此,您必须获得一个String?
字符串Nullable
。
更新
检查并确保通道能够将数据传递到本机。
扑朔迷离:
static const MethodChannel _channel = const MethodChannel('NAME');
在本机代码中:
val channel = MethodChannel(registrar.messenger(), "NAME");
TL; DR
在Kotlin中,将可为空的对象用于可为空的数据。
val userDOB : String? = call.argument("user_dob")
并与?.
一起使用(无效)
答案 1 :(得分:0)
映射 Json:
{
"user_dob":"15 November 1991",
}
Kotlin 代码:
MethodChannel(flutterView, channel).setMethodCallHandler { call, result ->
//you can get data in this object.
val user_dob = call.argument<String>("user_dob")
if (user_dob == null) {
// error
result.notImplemented()
return@setMethodCallHandler
}
//do else
}