Условно отрисовка виджета при изменении состояния во флаттере не работает - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь разработать приложение, которое состоит из двух разделов экранов.

  1. Раздел аутентификации

    1.1. Получить данные пользователя

    1.2. Получить OTP

  2. Home

    2.1 Панель инструментов

Я определил общий виджет, который заботится о переключении этих экранов. Он содержит состояние login, а также метод toggleLogin для изменения состояния. Я также передаю этот метод всем дочерним элементам, чтобы я мог вызвать его на последнем экране в данном случае, Get OTP screen (React js way). Я заметил, что происходит изменение состояния, состояние login меняется на true, но условный переключатель экрана не работает.

Вот моя работа,

обертка .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.
            ),
        );
    }
}

Я проверил его, печатая в соответствующих местах, таких как метод toggleLogin и build. После изменения печатаются значения true (согласно логу c). Изменение состояния происходит, но экран не отображается. В чем может быть проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...