Firebase 颤振型';列表<;动态>';不是类型为';字符串';
我有一个要更新的文档id列表。但是当我使用列表时,会发生错误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
类型“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列表。我仍然不知道如何将它分解为单个元素,并根据列表中的元素数运行它。