【问题标题】:Converting LinkedHashMap<dynamic,dynamic> to HashMap<String,List<String>> in dart or flutter在飞镖或颤振中将 LinkedHashMap<dynamic,dynamic> 转换为 HashMap<String,List<String>>
【发布时间】:2019-05-03 13:54:30
【问题描述】:

您好,我是 Flutter 和 Dart 的新手。我在类型转换地图方面遇到困难。我在 Firestore 上以HashMap&lt;String,List&lt;String&gt;&gt; 的格式保存了一些数据。在我的颤振应用程序中,当我获取这些数据时,我以LinkedHashMap&lt;dynamic,dynamic&gt; 的格式获取它。我想将此LinkedHashMap 转换为HashMap&lt;String,List&lt;String&gt;&gt;。请帮忙。

LinkedHashMap<dynamic,dynamic> mapUserWatchlistCompanies= documentSnapshot.data['Watchlist']; // Fetched data.

HashMap<String,List<String>> hashMapUserWatchlist = ???//How can it be converted? Need help here.

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    dart 中的类型转换与 Java 或 Swift 中的类型转换有点不同。在飞镖中,当涉及dynamic 时,您必须正确地投射所有内容。

    现在在你的情况下你得到一个LinkedHashMap&lt;dynamic, dynamic&gt;,现在在 JSON 的情况下可以安全地假设键总是String 值,但是键的value 可以是多种类型(数字、字符串、布尔值、地图或列表)。

    因此,如果您有以下格式的 JSON:

    {
      "keyOne": ["One", "Two","whatever"],
      "keyTwp": ["roses", "are", "red"],
      "keyThree":["You", "know", "nothing", "john", "nonw"]
    }
    

    这是一个HashMap&lt;String, List&lt;String&gt;&gt;,但dart最初会得到一个LinkedHashMap&lt;dynamic, dynamic&gt;,您可以使用以下代码安全地转换它:

     LinkedHashMap<dynamic, dynamic> theParsedOne = .....
        HashMap<String, List<String>> newMap = HashMap.from(theParsedOne.map((key, value) {
          List<dynamic> values = List.from(value);
          return MapEntry(
              key.toString(),
              values.map((theValue) {
                return theValue.toString();
              }).toList());
        }));
    

    【讨论】:

      【解决方案2】:

      我不确定HashMap 在您的代码中到底是什么,但如果您的意思是Map,您可能可以使用此代码创建地图:

      Map<String, List<String>> values = Map<String, List<String>>.from(snap.data['Watchlist']);
      

      【讨论】:

      • 我尝试了你的建议。它抛出异常 - type 'List&lt;dynamic&gt;' is not a subtype of type 'List&lt;String&gt;'
      【解决方案3】:

      如果您想 任何LinkedHashMap转换为Map

      序列化反序列化它回到 Map 工作。

      final validMap =
              json.decode(json.encode(internalLinkedHashMap)) as Map<String, dynamic>;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-20
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 2021-12-25
        • 2020-05-23
        相关资源
        最近更新 更多