Флаттер: как отложить метод сборки на какое-то время - PullRequest
0 голосов
/ 26 октября 2019

Я работаю над своим проектом, который включает в себя регистрацию и вход в систему, а также сохраняю веб-токен JSON (в SharedPreferences), полученный от API при входе в систему или регистрации.

Я создаласинхронный метод, который определяет, был ли токен уже сохранен в sharedPreferences (таким образом, пользователь проходит проверку подлинности и авторизуется для получения доступа к домашней странице без необходимости повторного ввода имени пользователя и пароля)

, когда я использую этот метод внутриметод initState () целевой страницы (в моем случае это страница, на которой отображается форма входа в систему), целевая страница отображается в течение 1 секунды или менее, а затем токен становится доступным после того, как станут доступны данные Future, возвращенные checkAuthentication, а затем пользователь перенаправляется на домашнюю страницу,

Я хочу, чтобы целевая страница вообще не появлялась, если только токен не найден

//by the way AuthData is just a custom class

Future<AuthData> checkAuthentication() async {
    AuthData authData = new AuthData();
    SharedPreferences preferences = await SharedPreferences.getInstance();

    if(preferences.containsKey("token")){
      authData.token =  preferences.get("token");
      return authData;
    }
    return null;
  }


// initState method
@override
  void initState() {
    super.initState();
checkAuthentication().then((AuthData data){
   if(data != null){
          Navigator.of(context).pushNamedAndRemoveUntil("/home-page", 
ModalRoute.withName(null));
      }    });
}

1 Ответ

0 голосов
/ 26 октября 2019

Вы можете использовать setState

bool isLogin = false;

@override
  void initState() {
    super.initState();
checkAuthentication().then((AuthData data){
       setState(() {
        if(!data)
        isLogin = true;
      });
      if(isLogin)
         Navigator.of(context).pushNamedAndRemoveUntil("/home-page",
         ModalRoute.withName(null));
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...