Как проверить, существует ли SharedPreferences для этого приложения во флаттере - PullRequest
0 голосов
/ 12 февраля 2020

мое приложение флаттера проверяет сохраненные данные в SharedPreferences при каждом запуске. чтобы использовать его позже в приложении, но когда я запускаю приложение в первый раз на устройстве, там сохраняется SharedPreferences, поэтому он получает все данные как null. поэтому я хочу убедиться, что он проверяет, существует ли сам файл, а не проверять определенное значение c,

примечание: Я использую это shared_preferences futter package.

вот мой код:

  checkingTheSavedData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String username = prefs.getString('username');
    if (username == null) {
      Navigator.pushReplacementNamed(context, '/login');
    } else {
      Navigator.pushReplacementNamed(context, '/main_page');
    }
  }

Итак, для первого запуска он делает Navigator.pushReplacementNamed(context, '/main_page');, но с пустыми данными, после этого, когда я делаю реальный вход в систему и Данные уже сохранены, все отлично работает. Есть идеи, как правильно с этим справиться?

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Необходимо проверить, существует ли ключ, используя prefs.containsKey('username').

1 голос
/ 12 февраля 2020

Когда я использую «shared_preferences», я лично использую помощника, чтобы получить и установить так:

GETTER

static Future<String> getUserName() async { 
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.getString('username') ?? '';
}

SETTER

static Future<String> setUserName(String value) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.setString('username', value);
}

To Отвечая на ваш вопрос, вы не можете проверить, существует ли «файл» SharedPreferences или нет. Ваш метод уже правильный.

0 голосов
/ 12 февраля 2020

Вы получаете пустой, потому что у вас еще нет своего КЛЮЧА SharedPreferences; так что просто поставьте оператор ?? и верните значение.

// Separated shared preferences method is a good call
  Future<bool> isUserLoggedIn() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getBool(IS_LOGGED_KEY) ?? false;
  }

  // Your logic
  void checkingTheSavedData() {
    isUserLoggedIn().then((isLogged) {
      if (isLogged) {
        // foo
      } else {
        // bar
      }
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...