Я пытаюсь разработать приложение, которое состоит из двух разделов экранов.
Раздел аутентификации
1.1. Получить данные пользователя
1.2. Получить OTP
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). Изменение состояния происходит, но экран не отображается. В чем может быть проблема?