«родная «ошибка AssertionError_throwNew» » ошибка с Firebase Firestore

#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. Добро пожаловать, приятель. Рад помочь.