Я работаю над своим проектом, который включает в себя регистрацию и вход в систему, а также сохраняю веб-токен 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));
} });
}