我正在尝试检查 _isLoggedIn 变量是否已设置为 True、False 或 Empty。布尔变量将在用户登录后设置。假设用户尚未登录并且尚未设置或存储 isLoggedIn 记录。下面这个方法的返回值是多少?
Future<bool> userIsLoggedIn() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool _isLoggedIn = prefs.getBool('isLoggedIn') as bool;
return _isLoggedIn;
}
getBool
的实现。你会看到:
bool? getBool(String key) => _preferenceCache[key] as bool?;
这意味着,如果
isLoggedIn
中没有设置SharedPreferences
键,那么prefs.getBool('isLoggedIn')
将返回null
。
现在,由于
_isLoggedIn
被声明为 bool
,因此将 null
(当该值不存在时)转换为 bool
as bool
会导致错误。
相反,我会选择:
Future<bool> userIsLoggedIn() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool? _isLoggedIn = prefs.getBool('isLoggedIn');
return _isLoggedIn ?? false;
}
空感知运算符 (
??
) 用于在 _isLoggedIn
为空时提供默认值 (false)。