Flutter中Uri.https含值为0的参数时无法生成并打印URI问题
解决Flutter中Uri.https包含数字0参数时生成失败的问题
问题分析
你的代码里参数problematic_id的值是数字类型的0,而Uri.https的第三个参数要求传入Map<String, String>类型(即便你声明为Map<String, dynamic>,底层处理时会直接过滤非字符串值)。当参数值为非字符串类型的0时,会被Uri构造器忽略,进而导致Uri生成异常。
修复代码
将数字类型的参数值转为字符串即可解决问题:
Future<bool> getThatUrl(cid) async { //cid = 0, for example Map<String, String> parameters = {}; // 直接声明为String类型Map更规范 String email = 'anymail@anymail.com'; parameters['email'] = email; parameters['problematic_id'] = cid.toString(); // 转为字符串类型 print(parameters); // prints: {email: anymail@anymail.com, problematic_id: 0} var uri = Uri.https('mywebpage.com', '/page.php', parameters); print(uri); // 正常输出: https://mywebpage.com/page.php?email=anymail%40anymail.com&problematic_id=0 }
补充说明
- 若你坚持使用
Map<String, dynamic>,只要确保所有参数值为字符串类型也可行,比如用parameters['problematic_id'] = '$cid';的方式转换 - Dart的Uri构造器对query参数类型有严格限制,仅字符串值会被正确解析并添加到Uri的query部分,非字符串值会被直接忽略,这也是单独传入
problematic_id=0无法正常工作的原因
内容的提问来源于stack exchange,提问作者Sisalik
相关产品推荐
相关产品推荐

