簡體   English   中英

Flutter onTap 與 REST 調用以無限循環結束

[英]Flutter onTap with REST call ends in infinity loop

我喜歡在 Flutter 中創建一個簡單的登錄。 運行代碼時,它會陷入無限循環。 我已經發現在構建方法中調用 REST API 是“不好的做法”,但我不知道如何避免這種情況。

我該如何解決這個問題? 什么是處理 REST 通過按鈕按下/點擊而不在“構建”方法中設置功能的最佳方法?

我的登錄視圖如下(細節省略):

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SingleChildScrollView(
            child: Container(
              height: MediaQuery.of(context).size.height,
              child: Stack(
                children: <Widget>[
                  Container(
                    padding: EdgeInsets.symmetric(horizontal: 20),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        _emailPasswordWidget(),
                        PrimaryButton("Login", true, performLogin),
                      ],
                    ),
                  ),
                ],
              ),
            )
        )
    );

主按鈕采用 lambda。

  void performLogin(BuildContext context) {
    final String userName = _userName.text.trim();
    final String password = _password.text.trim();
    if(password.isEmpty || userName.isEmpty) {
      return;
    }

    UserService service = UserService();
    service.loginUser(userName, password).then((val) {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => MainLayout()));
    }).catchError((e) {
      showDialog(context: context,
          builder: (context) {
            return AlertDialog(
                content: Text("ERROR")
            );
          });
    });
  }

這由“PrimaryButton”調用,如下所示:

onTap: widget.onTab(context)

我現在的問題是,每當我按下“登錄”按鈕時,它都會調用 function(用於測試,它是錯誤)並陷入無限錯誤循環。 當我按下某處關閉對話框時,它會再次觸發。 它似乎也可以一鍵觸發多次。

我發現了問題。 這不是由代碼引起的,而是由onTab lambda ( service.loginUser ) 中使用的 REST 請求引起的。 響應花費的時間比預期的要長,因此調用不會正確返回。

我在 REST 請求上使用超時來處理這些“錯誤”請求來解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM