【问题标题】:Flutter - Why debugger is debuging the code under the function call before function fully debugged?Flutter - 为什么调试器在函数完全调试器之前调试函数调用下的代码?
【发布时间】:2020-11-27 12:34:19
【问题描述】:

首先,很难为我解释我的问题,对于不好的解释,从现在开始很抱歉。 我正在调试我的颤振项目,有些东西引起了我的注意。

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() 函数中的最终响应行进行调试并完成它。我的检查一开始是假的,因为如果它一次变为真,那么即使我没有得到 200 状态代码,我在 _loginbutton 中的 if 语句也会再次工作,因为 _loginbutton 中的 if 语句在检查可能改变之前工作。为什么调试器没有完成 press() 函数进行调试,然后继续休息,我该如何解决这个问题。我用 VSCode 编写。

提前致谢!

【问题讨论】:

  • 据我了解,这是因为异步而发生的,程序不会等待响应继续。但仍然没有解决方案。

标签: flutter debugging dart vscode-debugger


【解决方案1】:

你可以试试这个原因是,你在非异步函数中调用异步函数。

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

【讨论】:

  • 它现在正在等待响应,但我无法检查 Navigator.push 的检查是否为真,无法确定我应该在哪里放置 if 语句。当我尝试将它放在 Navigator.push() 上时它会出错
  • 我忘记添加了。我修好了,你可以看到。
  • 是的,它现在起作用了,我明白了! Çok sağolasın.
猜你喜欢
  • 2021-04-14
  • 2020-02-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2021-05-19
  • 1970-01-01
相关资源
最近更新 更多