我的问题没什么好说的。
代码是:
Future<bool> getThatUrl(cid) async { //cid = 0, for example
Map<String, dynamic> parameters = Map();
String email = '[email protected]';
parameters['email'] = email;
parameters['problematic_id'] = cid;
print(parameters); // prints: {email: [email protected], problematic_id: 0}
var uri = Uri.https('mywebpage.com', '/page.php', parameters);
print(uri); // prints:
}
问题是,
uri
(未生成?并且)不会打印,除非我删除parameters['problematic_id'] = 0
。如果我删除它,那么它会打印 https://mywebpage.com/page.php?email=anymail%40anymail.com
,这是正确的,但我也需要 problematic_id=0
。
我尝试只使用一个参数,但如果是
parameters['problematic_id'] = 0
那么它仍然不起作用。
我不确定这是否是
_Uri._makeQueryFromParameters
内部实现中的错误或预期行为。
我可以看到,在内部实现中,
value
的每个queryParameters
应该是Iterable
或String
,并且您正在传递int
(cid = 0)。
由于
queryParameters
无论如何都被视为 String
,因此您不必担心这里的类型。因此,最好只调用 toString()
或将 cid
转换为字符串来解决此问题。
这是解决方案代码:
Uri getUri(String email, int cid) {
Map<String, dynamic> parameters = {
'email': email,
'problematic_id': "$cid"
};
print(parameters);
var uri = Uri.https('mywebpage.com', '/page.php', parameters);
print(uri);
return uri;
}
void main() {
final cid = 0;
final email = '[email protected]';
getUri(email, cid);
}
这里第 4 行,“$cid”会将 cid 转换为字符串,从而解决问题。
希望这有帮助。