我刚刚更新到Flutter 2。我更新了所有的依赖项,包括http。现在我遇到了以下问题:
Future<UserLogin> fetchStaff(String pUserName, String pPassword) async {
final response = await http
.post(Uri.encodeFull('$kBaseUrl/LoginService/CheckLogin'),
headers: {'Content-Type': 'application/json', 'Accept': 'application/json'},
body: '{ "pUser": "$pUserName", "pPassword": "$pPassword"}')
.timeout(Duration(seconds: kTimeOutDuration));
我在以下上收到错误:Uri.encodeFull('$kBaseUrl/LoginService/CheckLogin'
"无法将参数类型"String"分配给参数类型"Uri">
$kBaseUrl='https://subdom.mydomain.com:443/mobile';
我需要更改什么?
Post方法以前用于获取字符串,现在它们已修改为Uri
如此使用,Uri.parse
获得uri
.post(Uri.parse(Uri.encodeFull('$kBaseUrl/LoginService/CheckLogin'))
正如错误所说,这是因为post
函数需要一个Uri
,而您已经向它传递了String
(由Uri.encodeFull
返回(。您需要使用Uri.parse
向它传递Uri
。
final response = await http
.post(Uri.parse('$kBaseUrl/LoginService/CheckLogin'),
如果您有一个字符串,例如:
String strUri="${yourBaseUrl}/yourPath/yourFile";
使用
http.post(Uri.parse(strUri),
headers: {...},
body: {...},
);
足以让一切恢复正常。
如果uri字符串作为uri或uri引用无效,则可以尝试Uri.tryParse(strUri)
来处理null
。