在 dart 或 flutter 中将 LinkedHashMap<dynamic,dynamic> 转换为 HashMap<String,List<String>>

Abh*_*mol 5 dart flutter

嗨,我是扑扑和飞镖的新手。我在排版地图方面遇到困难。我在 Firestore 上保存了一些数据,格式为HashMap<String,List<String>>. 在我的 Flutter 应用程序中,当我获取这些数据时,我以LinkedHashMap<dynamic,dynamic>. 我想将其转换LinkedHashMapHashMap<String,List<String>>. 请帮忙。

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

HashMap<String,List<String>> hashMapUserWatchlist = ???//How can it be converted? Need help here.
Run Code Online (Sandbox Code Playgroud)

dan*_*ata 7

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

现在,在您的情况下,您会得到一个LinkedHashMap<dynamic, dynamic>,现在在 JSON 情况下,可以安全地假设键始终是String值,但value键可以是多种类型(数字、字符串、布尔值、映射或列表)。

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

{
  "keyOne": ["One", "Two","whatever"],
  "keyTwp": ["roses", "are", "red"],
  "keyThree":["You", "know", "nothing", "john", "nonw"]
}
Run Code Online (Sandbox Code Playgroud)

这是 a HashMap<String, List<String>>,但 dart 最初会得到 a LinkedHashMap<dynamic, dynamic>,您可以使用以下代码安全地转换它:

 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());
    }));
Run Code Online (Sandbox Code Playgroud)