如何将map转换为数组以进行firestore?扑

发布于 2025-01-11 15:52:31 字数 1263 浏览 0 评论 0原文

我有一个用户 ID,我想将其添加到 firestore,像这样

['GEcuHm3ICpWlEzfq1Z2tAjI2LII3', 'GEcuHm3ICpWlEzfq1Z2tAjI2LII3' ...]

我尝试了多种方法,但它不起作用

List membersListUid = [];

Future createGroup() async{
    GroupRoomModel newGroup = GroupRoomModel(
        groupName: groupName.text,
        groupRoomId: uuid.v1(),
        owner: userModel.uid,
        membersList: controller.membersList,
        membersListUid: controller.membersListUid.cast() // <---
    );
}
...
Future createGroupFunc() async{
    GroupRoomModel newGroup = GroupRoomModel(
        groupName: groupName.text,
        groupRoomId: uuid.v1(),
        owner: userModel.uid,
        membersList: controller.membersList,
        membersListUid: controller.membersListUid.map((e)=> e).toList() //<---
    );
...

也许这有助于理解代码

//Controller class

Map<String, dynamic>? userMap;

  onSearch() async {
    await _fireStore
        .collection('users')
        .where("email", isEqualTo: searchedMembers.text)
        .get()
        .then((value) {
      userMap = value.docs[0].data();
    });
    update();
  }

membersListUid.add({
        "uid": userMap!['uid']
      });

它​​仍然给我数组内的映射。

I have a users id I want to add it to firestore, like this

['GEcuHm3ICpWlEzfq1Z2tAjI2LII3', 'GEcuHm3ICpWlEzfq1Z2tAjI2LII3' ...]

I tried multiple ways but it didn't work

List membersListUid = [];

Future createGroup() async{
    GroupRoomModel newGroup = GroupRoomModel(
        groupName: groupName.text,
        groupRoomId: uuid.v1(),
        owner: userModel.uid,
        membersList: controller.membersList,
        membersListUid: controller.membersListUid.cast() // <---
    );
}
...
Future createGroupFunc() async{
    GroupRoomModel newGroup = GroupRoomModel(
        groupName: groupName.text,
        groupRoomId: uuid.v1(),
        owner: userModel.uid,
        membersList: controller.membersList,
        membersListUid: controller.membersListUid.map((e)=> e).toList() //<---
    );
...

Maybe this helps to understand the code

//Controller class

Map<String, dynamic>? userMap;

  onSearch() async {
    await _fireStore
        .collection('users')
        .where("email", isEqualTo: searchedMembers.text)
        .get()
        .then((value) {
      userMap = value.docs[0].data();
    });
    update();
  }

membersListUid.add({
        "uid": userMap!['uid']
      });

It's still gives me map within array.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖心男生 2025-01-18 15:52:31

问题:

membersListUid 是一个地图列表。这就是为什么您会在数据库中获得一组地图。
您需要使用 uid 键从地图中获取值,从而从每个 Map 中获取 uid 的实际值。

解决方案:

将此行更新

membersListUid: controller.membersListUid.map((e)=> e).toList()

为以下内容:

controller.membersListUid.map((e)=> (e as Map<String, dynamic>)['uid']).toList()

THE PROBLEM:

membersListUid is a List of Maps. That is why you get an array of Maps in your database.
You need to get the actual value of the uid from each Map by using the uid key to get the value from the map.

THE SOLUTION:

Update this line:

membersListUid: controller.membersListUid.map((e)=> e).toList()

to this below:

controller.membersListUid.map((e)=> (e as Map<String, dynamic>)['uid']).toList()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文