[英]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.