当前位置: 首页 > 知识库问答 >
问题:

颤振-使用重定向到新屏幕。然后(),提供程序。of()和Navigator

盛琪
2023-03-14

我有一个按钮,在初次点击/点击/触摸时,它会发布到API,并根据身份验证返回true或false。

onPressed: ()=>{
Provider.of<Login>(context, listen: false).login()
.then((value) => {
  if(value == true)
    Navigator.pushReplacementNamed(context, '/home')
  }),
},
Future<bool> login() async {
    try{
      var payload = jsonEncode({
        'email': usrname,
        'password': pswd
      });
      Map<String,dynamic> response = await fetch.post(url, body:payload, headers: {
        'Accept':'application/json',
        'content-type': 'application/json'
      })
      .then((value) => jsonDecode(value.body));
      if(response['token'] != ''){
        return true;
      }
    }
    catch(e){
      errorMsg = e.toString();
      notifyListeners();
      return false;
    }
    return false;
  }

成功验证后,它不会按预期重定向到新屏幕。我错过了什么还是我的逻辑有缺陷?

共有1个答案

贺元明
2023-03-14

wait旨在中断流程,直到async方法完成。然后然而不会中断流程(意味着将执行下一条指令),但使您能够在异步方法完成时运行代码。

在代码中:

问题与您的login方法有关。您使用了带有wait,然后,您不需要同时使用两者。

Future<bool> login() async {
    try{
      var payload = jsonEncode({
        'email': usrname,
        'password': pswd
      });
      Map<String,dynamic> response = await fetch.post(url, body:payload, headers: {
        'Accept':'application/json',
        'content-type': 'application/json'
      });
      var decodedResponse = jsonDecode(response.body);
      if(decodedResponse['token'] != ''){
        return true;
      }
    }
    catch(e){
      errorMsg = e.toString();
      notifyListeners();
      return false;
    }
    return false;
  }

您可以在SO问题中找到更多示例:

  • 异步/等待/然后飞镖/颤振
 类似资料:
  • 我在开发一个应用程序,我不能收到通知时,电话锁定的FCM。 我使用了firebase和Awesome通知插件来显示通知。 有人能帮帮我吗,我困在这里谢谢

  • Permission\u处理程序。飞奔 主要的飞奔 > 在应用程序开始时,我想请求存储权限我做了什么-创建类PermissionHandler并将其分配给属性 PermissionHandler()-有状态小部件,应在完成其业务逻辑后触发splashscreen 请求用户权限,直到用户授予它 在应用程序启动时一次性请求权限,如果接受,则加载启动屏幕,否则会弹出一个新对话框,将用户带到应用程序设置

  • 我已经为MFA开发了一个自定义凭证提供程序,它运行良好。我通过调用REST API在GetSerialization()方法中执行额外的身份验证检查。现在,如果通过REST API成功验证,我允许用户登录。但是对于验证失败的情况,我想显示错误屏幕,就像一个默认的提供者在用户名或密码不正确的情况下显示的那样(有一个“确定”按钮)。我已经了解,如果登录失败,默认情况下,这是在ReportResult(

  • 我使用pushNamed()从屏幕中获取返回数据,如下所示: 但代码有问题,这是完整的错误堆栈跟踪: 但以下代码正常工作:

  • 我正在使用omniauth saml对Ruby on Rails应用程序上的用户进行身份验证。 身份验证一直运行良好,直到我们声明尝试与使用ADFS(Windows Active Directory)的公司合作。 我们的应用程序能够路由到ADFS登录屏幕,进行登录操作,当ADFS重定向回我们的应用程序时,我们会看到错误消息: 通过调试,我们可以看到omniauth saml生成了此消息。 通过挖掘

  • 我在这里得到这个错误。并且,试图解决它。 > E/flatter(14838):[错误:flatter/lib/ui/ui_dart_state.cc(177)]未处理的异常:缺少PluginException(在通道插件上找不到方法getApplicationDocumentsDirectory.flatter.io/path_provider的实现)E/flatter(14838):\0 Ge