【问题标题】:Expected a value of type 'Map<String, Object>', but got one of type '_JsonMap' in flutter预期类型为 \'Map<String, Object>\' 的值,但在颤振中得到类型为 \'_JsonMap\' 的值之一
【发布时间】:2022-10-14 03:34:22
【问题描述】:

将 Flutter 更新为 null 安全性后,我得到了“Map<String, Object>”类型的值,但得到了“类型”错误之一。

 Future<bool> tryAutoLogin() async {
    final prefs = await SharedPreferences.getInstance();
     if (!prefs.containsKey('userData')) {
       return false;
     }
    try {
      final extractedUserData =
          json.decode(prefs.getString('userData')as String) as Map<String, Object>;
      print(extractedUserData);
    } catch (error) {
      print(error);
    }
   
    return true;
  }


有谁知道为什么会这样?先感谢您。

【问题讨论】:

  • 你能打印prefs.getString('userData')的返回吗?
  • 你能也包括_JsonMap的代码吗
  • prefs.getString('userData') 是字符串吗?但你尝试“作为字符串”

标签: flutter dart


【解决方案1】:

在 dart 中,Object 类型与关键字 dynamic 之间存在差异。 有什么区别?看看this。 现在,如果 jsonDecode 接收到一个 Map,那么它会返回一个 Map&lt;String, dynamic&gt; 以允许调用未为 Object 定义的方法。

解决方案:将Map&lt;String, Object> 替换为Map&lt;String, dynamic&gt;

另外,这里有一个代码风格提示:不要使用as String 强制转换String?,在可空值之后使用! 以假定它不为空。

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 2021-11-15
    • 2023-01-02
    • 1970-01-01
    • 2022-01-26
    • 2022-01-21
    • 2022-10-07
    • 2021-06-22
    相关资源
    最近更新 更多