将哈希映射保存到Firestore并从中侦听



我正在尝试保存并侦听来自Firestore的Map<int, List<Object>> myMap;

为此,我在我的存储库中实现了以下方法:

@override
Future<void> set(LargerObject setLargerObject) async {
try {
return _largeObjectCollection
.document(setLargerObject.firebaseId)
.setData(setLargerObject.toMap());
} catch (e) {
return handleFirestoreError(e);
}
}

在我的LargerObject中,我正在使用

Map<String, dynamic> toMap() {
return {
'propertyA': propertyA,
'myMap': myMap,
};
} 

方法,对于CCD_ 3也是如此。问题是,我不知道如何在此方法中正确映射myMapMap<int, List<Object>>

我知道Firestore中的Maps具有以下结构Map<String, dynamic>,但我应该如何映射List<Object>

我使用了一个变通方法来实现这一点。

我创建了一个新的类,在将HashMap条目保存到Firestore之前,我将它们保存到类型为NewClass的List中。以同样的方式,当我从Firestore读取数据时,我将它们转换为Map<int, List<Object>>

static Map<int, List<Object>> transformListToMap(List<dynamic> hList) {
Map<int, List<Object>> hMap = {};
for (var listElement in hList) {
hMap[listElement ['key']] = List.from(
listElement ['objectList']
?.map((x) => Object.fromMap(x)));
}
return hMap;
}

static List<Map<String, dynamic>> transformMapToList(
Map<int, List<Object>> myMap) {
List<NewClass> hList = [];
myMap?.forEach((key, value) {
hList.add(NewClass(objectList: value, key: key));
});
List<Map<String, dynamic>> hHList = hList?.map((x) => x?.toMap())?.toList();
return hHList;
}

最新更新