我正在编写一个Flutter插件,用于从平台特定端发送地图列表(FILE.ReceivedFileName
)。在平台特定方面,我使用默认消息编解码器发送这些对象。
%SourceFileName%
我在Dart方面收到如下值:
List<Map<String, double>>
打印值会显示正确的值。但是,在函数返回上,我在运行时收到以下错误// (example: Android side)
List<Map<String, Double>> out = new ArrayList<>();
... fill the map ...
result.success(out);
,表示从动态值到特定static Future<List<Map<String, double>>> getListOfMaps() async {
var traces = await _channel.invokeMethod('getListOfMaps');
print(traces); // works
return traces;
}
的强制转换不起作用。
如何在Dart中正确地投射来自MethodChannels的嵌套值?
答案 0 :(得分:4)
正如评论中所指出的,我必须将具有未知运行时类型的每个值单独地转换为期望的类型。
static Future<List<Map<String, double>>> getListOfMaps() async {
List<dynamic> traces = await _channel.invokeMethod(...);
return traces
.cast<Map<dynamic, dynamic>>()
.map((trace) => trace.cast<String, double>())
.toList();
}
答案 1 :(得分:0)
您现在可以使用 invokeListMethod
:
由于 invokeMethod 只能返回动态映射,我们改为使用 List.cast 创建一个新的类型化列表。
var channel = MethodChannel('foo_channel');
var list = await channel.invokeListMethod<Map<String, double>>('methodInJava');