繁体   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