FutureBuilder не работает должным образом с Firestore - PullRequest
0 голосов
/ 06 апреля 2020

не может создать запрос с помощью FutureBuilder. Firestore находится на последней версии. Это касается как устройств Android, так и iOS, есть идеи?

 return FutureBuilder<QuerySnapshot>(
                future: Firestore.instance
                    .collection('productlist')
                    .where('productid', isEqualTo: pid)
                    .limit(
                        1), // a previously-obtained Future<String> or null
                builder: (BuildContext context,
                    AsyncSnapshot<QuerySnapshot> snapshot) {
                  if (snapshot.hasData) {
                    productname = snapshot.data.documents[0]['productname'];

                    print("productname:" + productname);
                  }
                  else{
                    productname = "0";
                  }
                  },
                  );

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

вы можете использовать потоковый конструктор, вместо этого он работает довольно хорошо:

return StreamBuilder<QuerySnapshot>(
  stream: Firestore.instance.collection('productlist').where('productid', isEqualTo: pid).limit(1),
  builder: (context, snapshot) {
    if (snapshot.data != null) {
      // Here u will get list of document snapshots
      final List<DocumentSnapshot> documents = snapshot.data.documents;
      // now u can access each document by simply specifying its number
      // u can also use list view to display every one of them
      return ListView.builder(
        itemCount: documents.length,
        itemBuilder: (context, int index) => Text(documents[index]['productname']),
      );
    } else {
      // Show loading indicator here
    }
  },
);
0 голосов
/ 06 апреля 2020

Я думаю, что проблема в том, что вы не возвращаете виджет.

Попробуйте код ниже

FutureBuilder(
        future: Firestore.instance
                .collection('productlist')
                .where('productid', isEqualTo: pid)
                .limit(1),
        builder: (ctx, snapshot) {
          if (snapshot.connectionState == ConnectionState.done && snapshot.hasData) {
                return Text(snapshot.data.documents[0]['productname']);
          } else {
            return Text("0");
          }
        },
      ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...