如何将Objective-C的NSDictionary传递到Dart并选择对应接收类型
问题结论
Dart侧接收ObjC返回的NSDictionary类型数据,对应使用Map类型即可,可根据实际场景选择泛型限定。
原因说明
Flutter MethodChannel内置了平台侧与Dart侧的标准类型映射规则,ObjC的NSDictionary会被自动序列化转换为Dart的Map对象,对应映射关系如下:
- 通用场景下
NSDictionary->Map<dynamic, dynamic> - 若
NSDictionary的键全部为NSString类型,可对应Map<String, dynamic>做更精准的类型限定
代码示例
Dart侧接收写法
// 通用场景:字典键类型不固定时使用 Map<dynamic, dynamic>? result = await channel.invokeMethod('methodName'); // 适配你的业务场景:所有键都是字符串,可明确泛型为String Map<String, dynamic>? result = await channel.invokeMethod('methodName'); // 取值示例 var obj1 = result?['obj1']; String? obj2 = result?['obj2'] as String?;
注意事项
- 因为MethodChannel返回值可能为空,建议添加空安全标识
?避免空异常 - 若字典内部的value是自定义对象,需要单独做自定义序列化处理,基础类型不需要额外操作
内容的提问来源于stack exchange,提问作者ccd
相关产品推荐
相关产品推荐

