如何在颤振中检查此应用程序是否存在共享首选项



我的颤振应用程序每次启动时都会检查SharedPreferences中保存的数据。 稍后在应用程序中使用它,但是当我第一次在设备中运行该应用程序时,SharedPreferences保存了,因此它null获取所有数据。 所以我想确保它检查文件本身是否存在,而不是检查特定值,

注意:我正在使用这个shared_preferences的 futter 包。

这是我的代码:

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');但数据为空,之后当我进行真正的登录并且数据已经保存时,它工作正常。 知道如何以正确的方式处理这个问题吗?

您需要使用prefs.containsKey('username')检查密钥是否存在。

当我使用"shared_preferences"时,我个人使用一个助手来获取和设置,就像这样:

吸气剂

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

二传手

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

要回答您的问题,您无法检查共享首选项"文件"是否存在。您的方法已经正确。

您正在变空,因为您还没有共享首选项密钥; 所以只需输入??运算符并返回一个值。

// 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
}
});
}

虽然你已经得到了答案,但在这里我提到了我如何在我的应用程序中使用。

使用此设置值

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool("login", true);

检查方式包含登录页面中的密钥

SharedPreferences prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey("login")) {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) {
return LoginPage();
},
));
} 

还要像这样签入注销页面

SharedPreferences prefs = await SharedPreferences.getInstance();
if(prefs.containsKey("login")) {
prefs.remove("login");
Utils.successToast("Logout successfully");
Navigator.of(context).pop();
}

注意:您可以使用任何您想要的内容,例如"用户名"或其他内容,而不是在"登录"上

相关内容

最新更新