Flutter MethodChannel嵌套值:'List <dynamic>'不是'FutureOr <list <map <string,double =“”>&gt;&gt;'类型的子类型

时间:2018-06-15 11:49:22

标签: dart flutter

我正在编写一个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的嵌套值?

2 个答案:

答案 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');