Flutter MethodChannel传递复杂参数时出现类型转换错误怎么办?
在用Flutter的MethodChannel调用Android原生方法时,想传递一个包含多个字段的对象参数,但总是报”无法将Map转换为String”的错误。我尝试把参数转成Map类型,但原生层接收时还是有问题:
static const platform = MethodChannel('samples.flutter.dev/battery');
Map<String, dynamic> params = {
'name': 'test',
'value': 123,
'nested': {'id': 456}
};
try {
final result = await platform.invokeMethod('nativeMethod', params);
} catch (e) {
print(e); // 输出类型转换错误
}
原生Android方法定义是public void nativeMethod(String data),我本意是想把Map转成JSON字符串传递,但不知道应该在哪个环节做序列化处理?是不是需要手动转成JSON字符串再传?
直接贴代码吧:
然后在Android端接收时,记得把String再解析回Map:
这样改完复制过去试试,应该就没问题了。JSON序列化反序列化是最常用的解决方案,别忘了导json包。