Вы, вероятно, скопировали более старую версию своего кода, потому что маловероятно, что ваш код компилирует следующую строку вашей программы:
final DocumentSnapshot getuserdoc= await Firestore
.instance
.collection('users')
.document(userdocid).get();
Сообщение об ошибке в моей системе:
Тип аргумента 'Iterable<String>
' нельзя назначить типу параметра 'String
'.
Это означает, что userdocid
является Iterable
типа String
(Iterable<String>
), но ожидается параметр типа String
.
У вас есть несколько вариантов решения проблемы, но я предлагаю следующее: Поскольку вы ожидаете только один документ из вашего QuerySnapshot
, достаточно просто посмотреть на первый документ.
final QuerySnapshot searchedUserId = await Firestore.instance
.collection('users')
.where('userid', isEqualTo: userid)
.limit(1)
.getDocuments();
// if it is possible that searchedUserId returns no document make sure to
// check whether searchedUserId.documents.length > 0,
// otherwise searchedUserId.documents.first will throw an error
DocumentSnapshot document = searchedUserId.documents.first;
final userDocId = document.documentID;
final DocumentSnapshot getuserdoc =
await Firestore.instance.collection('users').document(userDocId).get();
Улучшенное решение:
Однако я считаю, что ваш код в любом случае немного избыточен, потому что вы ищете поле документа с таким же значением в качестве идентификатора документа. Вы можете сократить весь код до
final DocumentSnapshot getuserdoc =
await Firestore.instance.collection('users').document(userid).get();
Ошибка вызова getuserdoc.data['status']
Если вы получите сообщение об ошибке, похожее на
[](status)
был вызван на ноль
Тогда это означает, что getuserdoc
не имеет значения. Вероятно, это связано с тем, что в базе данных нет такой записи с данным идентификатором. Проверьте, есть ли идентификатор в вашей базе данных, в противном случае прокомментируйте ниже дополнительную информацию, потому что предоставленный код имел ошибки компиляции и не запускается вообще.