首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新的颤振规则导致了这个错误:参数类型'String?‘不能分配给参数类型'String‘

新的颤振规则导致了这个错误:参数类型'String?‘不能分配给参数类型'String‘
EN

Stack Overflow用户
提问于 2021-09-29 15:59:59
回答 1查看 299关注 0票数 0

我有这样的密码:

代码语言:javascript
复制
  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!)但无能为力,我不知道如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2021-09-29 21:24:11

关于@comment,我更新了代码,如下所示,它解决了所有错误:

代码语言:javascript
复制
  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;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69379801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档