用飞镖或颤动将LinkedHashMap <dynamic,dynamic>转换为HashMap <string,list <string >>

时间:2019-05-03 13:54:31

标签: dart flutter

嗨,我是扑扑和飞镖的新手。我在排版地图时遇到困难。我已经以HashMap<String,List<String>>的格式在Firestore中保存了一些数据。在我的flutter应用程序中,当我获取此数据时,将以LinkedHashMap<dynamic,dynamic>的格式获取它。我想将此LinkedHashMap转换为HashMap<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.

2 个答案:

答案 0 :(得分:1)

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

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

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

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

哪个是HashMap<String, List<String>>,但是dart最初会得到一个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());
    }));

答案 1 :(得分:0)

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

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