参数类型Map<dynamic, dynamic>无法赋值给Map<String, dynamic>?怎么解决
报错原因
Dart属于强类型语言,你定义的getData方法入参query没有指定泛型,默认推断类型为Map<dynamic, dynamic>,而dio的get方法中queryParameters参数要求的接收类型为Map<String, dynamic>?,要求键的类型必须是String,两者类型不匹配因此触发编译报错。
处理方案
方案1(推荐):明确入参泛型
直接在定义query参数时指定泛型为Map<String, dynamic>,从源头限制参数类型匹配dio的要求,修改后的代码如下:
void getData({ required String url, required Map<String, dynamic> query, }) { dio.get( url, queryParameters: query, ); }
方案2:传参时做类型转换
如果业务场景中无法修改入参的泛型定义,可以在给queryParameters传值时做类型转换,代码如下:
void getData({ required String url, required Map query, }) { dio.get( url, queryParameters: Map<String, dynamic>.from(query), ); }
注意事项
- 不要使用
query as Map<String, dynamic>的强制转换写法,如果原query中存在非String类型的键,运行时会直接抛出类型转换异常,使用Map<String, dynamic>.from的转换方式更安全,出错时的报错信息也更明确,方便排查问题。
内容的提问来源于stack exchange,提问作者mohammed
相关产品推荐
相关产品推荐

