有条件地在小部件的状态变化中渲染小部件不起作用

时间:2020-04-09 17:43:58

标签: flutter state render

我正在尝试开发一个由两部分屏幕组成的应用。

  1. 身份验证部分

    1.1。获取用户详细信息

    1.2。获取OTP

  2. 首页

    2.1仪表板

我已经定义了一个通用小部件,用于切换这些屏幕。它包含状态login和方法toggleLogin来更改状态。我还将这个方法传递给所有孩子,以便在这种情况下,我可以在最后一个屏幕Get OTP屏幕(React js方法)中调用它。 我注意到状态发生了变化,login状态更改为true,但条件屏幕开关不起作用。

这是我的工作,

wrapper.dart

// imports
class Wrapper extends StatefulWidget{
    @override
   _WrapperState createState() => _WrapperState();
}

class _WrapperState extends <State>Wrapper{
    bool login;
    void toggleLogin(bool state){
        setState((){
           login = state;
        });
    }

    Wiget build(BuildContext context){
        return login ? Dashboard() : GetUserDetails(toggleLogin: toggleLogin);
    }
}

get_user_details.dart

// imports
class GetUserDetails extends StatelessWidget{
    Function toggleLogin;
    GetUserDetails({this.toggleLogin});

    Wiget build(BuildContext context){
        return Scaffold(
            appBar: ....,
            body: Container(
                // Some UI stuffs.

                FlatButton(
                    child: Text("Next"),
                    onPressed: (){
                        Navigator.push(
                          context,
                          MaterialPageRoute(builder: (context)=>GetOTP(toggleLogin: toggleLogin));
                        );
                    },
                ),
            ),
        );
    }
}

get_otp.dart

// imports
class GetOTP extends StatelessWidget{
    Function toggleLogin;
    GetOTP({this.toggleLogin});

    Wiget build(BuildContext context){
        return Scaffold(
            appBar: ....,
            body: Container(
                // Some UI stuffs.

                FlatButton(
                    child: Text("Verify"),
                    onPressed: (){
                        if(valid)
                            toggleLogin(true);
                    },
                ),
            ),
        );
    }
}

Dashboard.dart

// imports
class Dashboard extends StatelessWidget{
    Wiget build(BuildContext context){
        return Scaffold(
            appBar: ....,
            body: Container(
                // Some UI stuffs.
            ),
        );
    }
}

我通过在toggleLoginbuild方法内部的适当位置打印来进行测试。更改后,打印的值为true(根据逻辑)。状态发生了变化,但是没有重新显示屏幕。可能是什么问题?

0 个答案:

没有答案