Flutter条件语句未按预期执行:API返回匹配值却进入else分支
Flutter条件分支未按预期执行问题
我有一段Flutter代码,其中的条件语句未按预期执行,代码如下:
onPressed: () async { if ((_formKey.currentState != null && _formKey.currentState!.validate()) || (_formKey1.currentState != null && _formKey1.currentState!.validate())) { String apiResponse = await loginAPI(email, password); print("api response is: $apiResponse"); if (apiResponse == 'false') { setState(() { isError = true; isErroremail = false; print("isError variable is set to true"); }); } else if (apiResponse == 'username false') { setState(() { isErroremail = true; isError = false; print("isErroremail variable is set to true"); }); } else { setState(() { isError = false; isErroremail = false; print("isError and isErroremail variables are reset."); }); } if (!isError && !isErroremail) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("processing Data")), ); } } print("button has been pressed"); },
尽管API返回内容为flutter: api response is: "username false",但代码并未进入else if (apiResponse == 'username false')分支,打印日志验证如下:
flutter: api response is: "username false" flutter: isError and isErroremail variables are reset. flutter: button has been pressed
问题原因
API返回的字符串包含首尾双引号(实际值为"username false"),但判断条件是和不带双引号的'username false'做全等比较,两者不匹配,因此代码直接走到else分支。
解决方法
方法一:去除API返回字符串的首尾双引号
在获取API响应后,先处理字符串移除多余引号,兼容性更强:
String apiResponse = await loginAPI(email, password); // 精准去除首尾的双引号 apiResponse = apiResponse.trim(); if (apiResponse.startsWith('"') && apiResponse.endsWith('"')) { apiResponse = apiResponse.substring(1, apiResponse.length - 1); } print("api response is: $apiResponse");
方法二:修改判断条件匹配带引号的字符串
直接将判断条件中的字符串改为带双引号的形式:
else if (apiResponse == '"username false"') { setState(() { isErroremail = true; isError = false; print("isErroremail variable is set to true"); }); }
内容的提问来源于stack exchange,提问作者Zak345
相关产品推荐
相关产品推荐

