Firebase 颤振型';列表<;动态>';不是类型为';字符串';

Firebase 颤振型';列表<;动态>';不是类型为';字符串';,firebase,flutter,dart,Firebase,Flutter,Dart,我有一个要更新的文档id列表。但是当我使用列表时,会发生错误类型“list”不是类型“String”的子类型 我的firebase代码: Future createGroupChat( String groupName, String userName, memberList, memberIDList) async { FirebaseFirestore.instance .collection('users') .where('userna

我有一个要更新的文档id列表。但是当我使用列表时,会发生错误
类型“list”不是类型“String”的子类型

我的firebase代码:

Future createGroupChat(
      String groupName, String userName, memberList, memberIDList) async {
    FirebaseFirestore.instance
        .collection('users')
        .where('username', isEqualTo: memberList)
        .snapshots();

    DocumentReference groupDocRef = await groupCollection.add({
      'groupName': groupName,
      'admin': [userName],
      'members': memberList,
      'groupID': '',
    });

    groupDocRef.update({
      'groupID': groupDocRef.id,
      'members': FieldValue.arrayUnion([userName])
    });

    DocumentReference userDocRef =
        FirebaseFirestore.instance.collection('users').doc(userID);
    userDocRef.update({
      'groups': FieldValue.arrayUnion([groupDocRef.id + '_' + groupName])
    });


    DocumentReference memberDocRef =
        FirebaseFirestore.instance.collection('users').doc(memberIDList);
    return memberDocRef.update({
      'groups': FieldValue.arrayUnion([groupDocRef.id + '_' + groupName])
    });
    
  }
我按下代码触发
createGroupChat

onPressed: () {
          if (groupNameController != null) {
            DatabaseMethods(userID: user.uid).createGroupChat(
                groupNameController.text,
                Constants.myName,
                selectedUsers,
                memberIDList);
            Navigator.push(context,
                MaterialPageRoute(builder: (context) => GroupChatPage()));
          } 
        },
我尝试了@salman的建议,使用for循环将索引传递给memberIDList[index],如下所示:

for (var i = 0; i < memberIDList.length; i++) {
      DocumentReference memberDocRef =
          FirebaseFirestore.instance.collection('users').doc(memberIDList[i]);
      memberDocRef.update({
        'groups': FieldValue.arrayUnion([groupDocRef.id + '_' + groupName])
      });
      */
      return print(memberIDList[i]);
    }
for(var i=0;i

但是for循环只迭代一次,即使列表中有三个变量。

将索引添加到
membberIDList

   Future<void> updateMethod({int index}){
        DocumentReference memberDocRef =
                FirebaseFirestore.instance.collection("user").doc(memberIDList[index]);
            return await memberDocRef.update({
              'groups': FieldValue.arrayUnion([groupDocRef.id.toString() + '_' + groupName])
            });

}
未来更新方法({int index}){
DocumentReference成员docref=
FirebaseFirestore.instance.collection(“用户”).doc(memberIDList[index]);
返回等待成员docref.update({
“组”:FieldValue.arrayUnion([groupDocRef.id.toString()+'\u2'+groupName])
});
}

memberIDList是List类型,doc方法签名采用字符串作为参数。尝试传递类型为String的memberIDList元素,而不是将整个列表作为参数传递

如果要获取memberIDList所有元素的数据,可以选择使用Future.forEach方法

Future getDataByUserId(String userId) {
  DocumentReference memberDocRef = FirebaseFirestore.instance.collection("user").doc(userId);
 
  return memberDocRef.update({
    'groups': FieldValue.arrayUnion([groupDocRef.id + '_' + groupName])
  });
}


Future.wait(memberIDList.map(getDataByUserId)).then((List responses) => ... );

对不起,我没有提到错误行。错误出现在
doc(memberIDList)
上。
memberIDLis
的值是多少?我已经更新了问题memberIDLis应该是字符串而不是列表,如果您想在每次必须向
memberIDLis[index]传递索引时使用不同的文档
很抱歉,我不知道如何应用您上面提到的内容。为了更好地理解,我添加了更多的代码。您可以发布错误堆栈跟踪吗?我添加了错误的屏幕截图。您仍然将列表而不是字符串作为参数传递,是否有具体原因?memberIDList是用户选择要添加到组中的ID列表。我仍然不知道如何将它分解为单个元素,并根据列表中的元素数运行它。