Flutter - 为什么调试器在函数完全调试器之前调试函数调用下的代码?
Flutter - Why debugger is debuging the code under the function call before function fully debugged?
首先,很难为我解释我的问题,很抱歉从现在开始解释不好。
我正在调试我的 flutter 项目,有些东西引起了我的注意。
Widget _loginbutton() {
return Container(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: 35.0,
child: RaisedButton(
onPressed: () {
press();
if (check == true) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserPage()),
);
} else {}
},
color: Colors.white70,
child: Text(
'Giris Yap',
style: TextStyle(fontSize: 20),
),
),
),
);
}
这是我的登录按钮并且
void press() async {
final response = await http.post(url,
headers: {"Content-type": "application/json", "accept": "/"},
body: json.encode({
'username': id,
'password': pwd,
'deviceId': devid,
}));
if (response.statusCode == 200) {
var jsonResponse = jsonDecode(response.body);
print("OK");
if (jsonResponse['success'] == true) {
// globaluserData.setName(jsonResponse['data']['firstName'].toString());
check = true;
}
} else {
check = false;
print("NOT OK");
}
print(response.body);
}
这是我的新闻功能,通过onPress调用。
在调试模式下,调试器转到 onPressed,然后是 press() 函数。在 press() 函数中,它对 json 数据进行编码,在得到响应之前,它退出 press() 函数并继续调试 press() 下的 _loginbutton 中的 if 语句。如果检查为真,它会执行它应该执行的操作,然后它会从 press() 函数中的最终响应行继续调试并完成它。我的检查一开始是错误的,因此,如果它变为真一次,那么我在 _loginbutton 中的 if 语句再次起作用,即使我没有得到 200 状态代码,因为 _loginbutton 中的语句在检查可能改变之前起作用。为什么调试器没有完成 press() 函数进行调试然后继续休息,我该如何解决这个问题。我写在VSCode.
提前致谢!
你能试试这个吗?原因是,你在非异步函数中调用异步函数。
Future<bool> press() async {
final response = await http.post(url,
headers: {"Content-type": "application/json", "accept": "/"},
body: json.encode({
'username': id,
'password': pwd,
'deviceId': devid,
}));
if (response.statusCode == 200) {
var jsonResponse = jsonDecode(response.body);
print("OK");
if (jsonResponse['success'] == true) {
// globaluserData.setName(jsonResponse['data']['firstName'].toString());
return true;
}
}
else {
return false;
print("NOT OK");
}
print(response.body);
}
Widget _loginbutton() {
return Container(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: 35.0,
child: RaisedButton(
onPressed: () async {
press().then((value) {
if(value){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserPage()),
);}
});
},
color: Colors.white70,
child: Text(
'Giris Yap',
style: TextStyle(fontSize: 20),
),
),
),
);
}
首先,很难为我解释我的问题,很抱歉从现在开始解释不好。 我正在调试我的 flutter 项目,有些东西引起了我的注意。
Widget _loginbutton() {
return Container(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: 35.0,
child: RaisedButton(
onPressed: () {
press();
if (check == true) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserPage()),
);
} else {}
},
color: Colors.white70,
child: Text(
'Giris Yap',
style: TextStyle(fontSize: 20),
),
),
),
);
}
这是我的登录按钮并且
void press() async {
final response = await http.post(url,
headers: {"Content-type": "application/json", "accept": "/"},
body: json.encode({
'username': id,
'password': pwd,
'deviceId': devid,
}));
if (response.statusCode == 200) {
var jsonResponse = jsonDecode(response.body);
print("OK");
if (jsonResponse['success'] == true) {
// globaluserData.setName(jsonResponse['data']['firstName'].toString());
check = true;
}
} else {
check = false;
print("NOT OK");
}
print(response.body);
}
这是我的新闻功能,通过onPress调用。
在调试模式下,调试器转到 onPressed,然后是 press() 函数。在 press() 函数中,它对 json 数据进行编码,在得到响应之前,它退出 press() 函数并继续调试 press() 下的 _loginbutton 中的 if 语句。如果检查为真,它会执行它应该执行的操作,然后它会从 press() 函数中的最终响应行继续调试并完成它。我的检查一开始是错误的,因此,如果它变为真一次,那么我在 _loginbutton 中的 if 语句再次起作用,即使我没有得到 200 状态代码,因为 _loginbutton 中的语句在检查可能改变之前起作用。为什么调试器没有完成 press() 函数进行调试然后继续休息,我该如何解决这个问题。我写在VSCode.
提前致谢!
你能试试这个吗?原因是,你在非异步函数中调用异步函数。
Future<bool> press() async {
final response = await http.post(url,
headers: {"Content-type": "application/json", "accept": "/"},
body: json.encode({
'username': id,
'password': pwd,
'deviceId': devid,
}));
if (response.statusCode == 200) {
var jsonResponse = jsonDecode(response.body);
print("OK");
if (jsonResponse['success'] == true) {
// globaluserData.setName(jsonResponse['data']['firstName'].toString());
return true;
}
}
else {
return false;
print("NOT OK");
}
print(response.body);
}
Widget _loginbutton() {
return Container(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: 35.0,
child: RaisedButton(
onPressed: () async {
press().then((value) {
if(value){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserPage()),
);}
});
},
color: Colors.white70,
child: Text(
'Giris Yap',
style: TextStyle(fontSize: 20),
),
),
),
);
}