Flutter使用非字符串参数构造Uri时声明失败相关问题咨询
Dart Uri 构造参数类型问题解答
Dart 标准库中Uri.http、Uri.https构造方法的queryParameters参数虽然声明类型为Map<String, dynamic>,但内部并未实现非字符串类型值的自动转换逻辑,该参数的dynamic类型仅用于兼容两类合法取值:
- 单值参数:
String类型的参数值 - 多值参数:
Iterable<String>类型的参数值(用于同一个参数名传递多个值的场景)
你传入int类型的参数值时,Uri构造过程会直接抛出类型异常,因此后续的打印语句不会执行;你所在的业务方法应该是捕获了该异常后返回了整数类型的错误状态码,才会导致Bloc接收到非预期的int类型值,抛出int is not a subtype of List<String>的错误。
构造Uri时如果参数值为非字符串类型,需要手动转换为字符串,两种常见实现方式如下:
- 声明参数时直接转换
Map<String, dynamic> parameters = { 'minPopulation': 150000.toString(), 'radius': 30.toString() };
- 批量自动转换所有参数值
final rawParams = {'minPopulation': 150000, 'radius': 30}; final parameters = rawParams.map((key, value) => MapEntry(key, value.toString()));
内容的提问来源于stack exchange,提问作者Vincenzo
相关产品推荐
相关产品推荐

