如何使RaisedButton属性“ onPressed”执行而无需用户单击按钮。 onPressed具有asyc功能

时间:2019-10-11 09:51:22

标签: flutter

导航到此页面时,我正在获取用户名和密码。 AuthProvider具有登录方法,该方法将从服务器获取authToken,而该令牌需要进入item_list页面。我需要做的就是自动单击按钮!感谢有人可以帮忙!

  Widget _autoLogin() {
    return FlatButton(
      color: Colors.redAccent,
      padding: EdgeInsets.all(15.0),
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0)),
      child: Text('auto logging...', style: TextStyle(color: Colors.white)),
      onPressed: () async {
        var authProvider = Provider.of<AuthProvider>(context);
        var loggedInUser = await authProvider.login(
            widget.savedUsername, widget.savedPassword);
        if (loggedInUser != null) {
          setState(() {
            Navigator.pushNamed(context, '/item_list');
          });
        }
      },
    );
  }

1 个答案:

答案 0 :(得分:0)

您可以将逻辑提取到函数中,而不是使按钮自动单击,您可以将其传递给按钮按下,也可以在从服务器获取authToken后调用它。

示例:-

Widget _autoLogin() {
  return FlatButton(
    color: Colors.redAccent,
    padding: EdgeInsets.all(15.0),
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0)),
    child: Text('auto logging...', style: TextStyle(color: Colors.white)),
    onPressed: autoLogin,
  );
}

autoLogin() async {
  var authProvider = Provider.of<AuthProvider>(context);
  var loggedInUser = await authProvider.login(
      widget.savedUsername, widget.savedPassword);
  if (loggedInUser != null) {
    setState(() {
      Navigator.pushNamed(context, '/item_list');
    });
  }
}

您还可以将autoLogin函数移至provider并提供它的引用,以便在获取authToken后可以调用此函数