snapshot.data.length в itemcount не работает: «Длина получателя« длина »была вызвана нулем» - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь получить документы из хранилища с помощью следующего кода:

 Future getCategories() async {
    var firestore = Firestore.instance;
    QuerySnapshot qn = await firestore.collection("categories").getDocuments();
    return qn.documents;
  }

 @override
  Widget build(BuildContext context) {
    return Container(
      child:FutureBuilder(
        future:getCategories(),
        builder:(context, snapshot){
          if(snapshot.connectionState == ConnectionState.waiting){
            return Center(
              child:Text("Loading...")
            );
         }
         else
         {
           return GridView.builder(
             itemCount: snapshot.data.length,
             gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
                 crossAxisSpacing: 6.0, mainAxisSpacing: 6.0, crossAxisCount: 2),
              itemBuilder: (BuildContext context, int index) {
                return SingleCategory(
                  category_name:  snapshot.data[index].data["title"],
                  category_picture: snapshot.data[index].data["picture"],
                );
              }
           );
         }
        }
      )
    );

Когда я запускаю код, я получаю следующую ошибку:

I / flutter (7555): ══╡ ИСКЛЮЧЕНИЕ ПРОВЕДЕНО БИБЛИОТЕКОЙ ВИДЖЕТОВ ╞══════════════════════════════════════════════════════════ I / flutter (7555): было сгенерировано следующее NoSuchMethodError, создающее FutureBuilder (грязный, состояние: I / flutter (7555): _FutureBuilderState # c3e7b): I / flutter (7555): геттер 'length' был вызван нулем.I / flutter (7555): приемник: ноль I / flutter (7555): пробный вызов: длина I / флаттер (7555): I / флаттер (7555): когда было сгенерировано исключение, это был стек: I / флаттер (7555): # 0 Object.noSuchMethod (dart: core / runtime / libobject_patch.dart: 50: 5)

Может кто-нибудь помочь мне, пожалуйста.

1 Ответ

0 голосов
/ 24 января 2019

Как мы выяснили в комментариях, вы используете правило авторизации, которое запрещает доступ для всех запросов:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
       allow read, write: if false;
    }
  }
}

Я думаю, вы хотели написать что-то вроде этого (режим только для чтения):

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
       allow read;
       allow write: if false;
    }
  }
}

Попробуйте это правило

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...