#firebase #flutter #dart #google-cloud-firestore
#firebase #flutter #dart #google-облако-firestore
Вопрос:
У меня есть эта функция, которая проверяет, существует документ или нет, если exists возвращает true в противном случае false :
Future<bool> checkMissingId(String id) async {
String str = id.toLowerCase();
String letter = str[0];
String path = letter "/" str;
try {
final snapShot =
await FirebaseFirestore.instance.collection(path).doc(str).get();
if (snapShot == null || !snapShot.exists) {
return true;
} else
return false;
} catch (e) {
print(e);
return false;
}
}
Но когда я вызываю его отсюда (после сохранения и проверки формы) :
Future<void> _submit() async {
//Create Artist and send it to the database
if (_validateAndSaveForm()) {
await checkMissingId(userNameF);
}
}
Все зависает, и открывается новый файл с именем «errors_patch.dart» с этим исключением :
static _doThrowNew(int assertionStart, int assertionEnd, Object? message)
native "AssertionError_throwNew";
Я думаю, проблема в том, что checkMissingId имеет тип Future, и, возможно, я неправильно обрабатываю фьючерсы … Но ошибка также выделяется await FirebaseFirestore.instance.collection(path).doc(str).get();
, поэтому я не знаю точно, как изолировать проблему.
Это стек :
assert(isValidCollectionPath(collectionPath),
await FirebaseFirestore.instance.collection(path).doc(str).get();
with a red quotes :
_AssertionError ('package:cloud_firestore/src/firestore.dart': Failed assertion: line 74 pos 12: 'isValidCollectionPath(collectionPath)': a collection path must point to a valid collection.)
await checkMissingId(userNameF);
Может быть, это зависит от неправильного пути к документу из Firestore?
Ответ №1:
Я думаю, что вы передаете неправильное имя коллекции в этой строке:
final snapShot = await FirebaseFirestore.instance.collection(path).doc(str).get();
потому что ваша переменная path такая:
String path = letter "/" str; // I guess here is something wrong
Имя вашей коллекции будет фиксированной строкой, как показано ниже на этом скриншоте (комментарии, сообщения, пользователи и т. Д.):
Комментарии:
1. Я уверен, что этих коллекций не существовало … Но я думал, что Firebase создаст их… Может быть, Firebase сделает это, когда я использую «set», «get» вместо потребностей существующей коллекции?
2. Да, вы правы. Сначала вы должны создать коллекцию, используя этот
set
метод. Только после этого вы должны использовать этотget
метод. Firebase не создаст коллекцию, если вы используете этотget
метод.3. Добро пожаловать, приятель. Рад помочь.