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),
      ),
    ),
  ),
  );
}