【问题标题】:How to set state using button click in flutter?如何在颤动中使用按钮单击设置状态?
【发布时间】:2021-04-07 05:02:27
【问题描述】:

我有一个布尔值 isUserLoggedIn = false;在我的 main.dart 文件中,当 isUserLoggedIn = false 我正在加载时

Widget build(BuildContext context) {
return Scaffold(
  body: isUserLoggedIn == false ? IntroAuthScreen() : HomePage(),
);

这工作正常。 IntroAuthScreen 正在加载。但是 IntroAuthScreen 中有一个按钮,当用户单击该按钮时,我希望 isUserLoggedIn 的值为 true,他将被重定向到 HomePage(),如上面的代码所示。

IntroAuthCode:-

child: ElevatedButton.icon(
            icon: Icon(
              Icons.navigate_next,
              color: Colors.white,
            ),
            onPressed: () {
              setState(() {
                username = usernameController.text;
                isUserLoggedIn = true;
              });
              print(username);
              Navigator.pop(context);
            },
            label: Text("Finish"),
          ),

但它不起作用。帮帮我

【问题讨论】:

    标签: flutter


    【解决方案1】:

    如果你尝试创建一个包装类而不是切换脚手架的内容呢?

    大概是这样的:

    class AuthWrapper extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final _user = Provider.of<User>(context);
    
        return (_user == null) ? IntroAuthScreen() : HomeScreen();
      }
    }
    

    答案确实使用了Provider,但它绝对是一个值得考虑学习的包。

    【讨论】:

      【解决方案2】:

      检查下面的代码。

         Widget build(BuildContext context) {
              return Scaffold(
                body: isUserLoggedIn == false ? IntroAuthScreen() : HomePage(),
              );
          
              IntroAuthScreen() async {
                  bool isLoggedIN = await Navigator.push(MaterialPageRoute Bla Bla);
                   setState((){
                      isUserLoggedIn = isLoggedIN ?? false;
                   });
              }
          }
      

      在验证码中

      child: ElevatedButton.icon(
                  icon: Icon(
                    Icons.navigate_next,
                    color: Colors.white,
                  ),
                  onPressed: () {
                    setState(() {
                      username = usernameController.text;
                      isUserLoggedIn = true;
                    });
                    print(username);
                    Navigator.pop(context, isUserLoggedIn);
                  },
                  label: Text("Finish"),
                ),
      

      【讨论】:

      • IntroAuthScreen() 是一个有状态的小部件
      • 它是您编写如何使用 Material Page 路由打开 Next Screen 的函数
      • 如何添加异步,因为 IntroAuth 是一个 stf 小部件
      猜你喜欢
      • 2012-03-17
      • 2023-02-22
      • 1970-01-01
      • 2019-08-31
      • 2021-04-29
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      相关资源
      最近更新 更多