【问题标题】:prefs.getString telling me that a String is a String?prefs.getString 告诉我一个字符串是一个字符串?
【发布时间】:2022-08-16 00:48:40
【问题描述】:
我正在尝试将字符串保存到共享首选项,然后检索它。
但是,我的 Android Studio 告诉我有一个错误。
具体来说,它说:
参数类型 \'String?\' 不能分配给参数类型 \'String\'。但是,我不知道它指的是什么,因为我不认为我曾经指定该变量是一个字符串?
这是代码:
void _setFirstAppLaunchDate(DateTime value) async{
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(\'firstLaunchDate\', value.toString());
}
Future<DateTime> getFirstAppLaunchDate() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
if (prefs.getString(\'firstLaunchDate\') != null)
return DateTime.parse(prefs.getString(\'firstLaunchDate\'));
else {
var now = DateTime.now();
_setFirstAppLaunchDate(now);
return now;
}
标签:
string
flutter
dart
dart-null-safety
flutter-sharedpreference
【解决方案1】:
return DateTime.parse(prefs.getString('firstLaunchDate'));
这可能会返回空值而不是字符串。这就是所谓的字符串?如果它为空,您可以分配一个占位符值,如下所示
return DateTime.parse(prefs.getString('firstLaunchDate')??DateTime.now().toString());
【解决方案2】:
prefs.getString('firstLaunchDate') 可以返回 null。因此,它显示此错误。虽然您已经完成了空值检查,但您可以在其末尾添加 !。
if (prefs.getString('firstLaunchDate') != null)
return DateTime.parse(prefs.getString('firstLaunchDate')!);
我认为更好的方法是创建一个变量
Future<DateTime> getFirstAppLaunchDate() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final firstData = prefs.getString('firstLaunchDate');
if (firstData != null) {
return DateTime.parse(firstData);
} else {
var now = DateTime.now();
_setFirstAppLaunchDate(now);
return now;
}
}
【解决方案3】:
您还可以使用此语法来指示空值的默认值:
返回 DateTime.parse(prefs.getString('firstLaunchDate') ?? '1980-01-01');