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