【问题标题】: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');

        【讨论】:

          猜你喜欢
          • 2014-12-21
          • 1970-01-01
          • 1970-01-01
          • 2019-05-11
          • 1970-01-01
          • 2021-10-21
          • 2022-11-24
          • 2013-05-12
          相关资源
          最近更新 更多