我有这样的密码:
String? _token;
DateTime? _expiryDate;
String? _userId;
Timer? _authTimer;
Future<bool> tryAutoLogin() async {
final prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('userData')) {
return false;
}
final extractedUserData =
json.decode(prefs.getString('userData')) as Map<String, Object>;// FIRST ERROR
final expiryDate = DateTime.parse(extractedUserData['expiryDate']);// SECOND ERROR
if (expiryDate.isBefore(DateTime.now())) {
return false;
}
_token = extractedUserData['token']; //THIRD ERROR
_userId = extractedUserData['userId']; // THIRD ERROR
_expiryDate = expiryDate;
notifyListeners();
_autoLogout();
return true;
}但它给了我这些错误:
参数类型'String?‘不能分配给参数类型'String‘。
参数类型为“Object?”不能分配给参数类型'String‘。
“Object?”类型的值?不能分配给“String?”类型的变量。尝试更改变量的类型,或将右侧类型转换为“String?”。
我从一个颤振教程中找到了这段代码,并试图通过在一些变量类型之后添加?或!标记来修复错误,但我似乎做得不太好。
编辑:通过更新这一行代码
final extractedUserData = json.decode(prefs.getString('userData')) as Map<String, Object>;
至
final extractedUserData = json.decode(prefs.getString('userData')) as Map<String, dynamic>;
第一个错误仍然存在,但其他错误消失了。我还试着更新线路,比如
final extractedUserData = json.decode(prefs!.getString('userData')) as Map<String, dynamic>;
(将prefs改为prefs!)但无能为力,我不知道如何修复它?
发布于 2021-09-29 21:24:11
关于@comment,我更新了代码,如下所示,它解决了所有错误:
String? _token;
DateTime? _expiryDate;
String? _userId;
Timer? _authTimer;
Future<bool> tryAutoLogin() async {
final prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('userData')) {
return false;
}
final extractedUserData = json.decode(prefs.getString('userData') as String)
as Map<String, Object>;
final expiryDate =
DateTime.parse(extractedUserData['expiryDate'] as String);
if (expiryDate.isBefore(DateTime.now())) {
return false;
}
_token = extractedUserData['token'] as String;
_userId = extractedUserData['userId'] as String;
_expiryDate = expiryDate;
notifyListeners();
_autoLogout();
return true;
}https://stackoverflow.com/questions/69379801
复制相似问题