# #firebase #flutter #google-cloud-firestore
Вопрос:
У меня есть будущая функция для получения данных из Firebase, которая неправильно выполняет пустые запросы:
Future getProducts(vendorId) async { await vendorsInfoColl.doc(vendorId) .collection("products") .get() .then((QuerySnapshot querySnapShot) async { if (querySnapShot.docs.isNotEmpty){ print('not empty'); print(querySnapShot.docs); return querySnapShot.docs; } else { print('snapshot empty'); return null; } }); }
Мне просто трудно заставить будущего строителя увидеть это. Все время говорит, что есть пустые данные.
Widget build(BuildContext context) { return AlertDialog( // pull title from db // title: Future Text(vendorTitle.toString()), title: Text(vendorTitle.toString()), content: FutureBuilder( future: VendorDatabase().getProducts(widget.vendorId), builder: (BuildContext context, AsyncSnapshot snapshot) { print(snapshot.connectionState); if (snapshot.connectionState == ConnectionState.waiting) { return CircularProgressIndicator(); } else if (snapshot.connectionState == ConnectionState.done) { if (snapshot.hasError) { return const Text('Error'); } else if (snapshot.hasData) { var blabla = snapshot.data; print('there is snapshot data: $blabla'); return ListView.builder( itemCount: 3, itemBuilder: (context, index) { return ListTile( title: Text(blabla['products']) //lt;-- i know this is wrong but can't fixt it till future builder actually sees some data. ); } ); } else { return const Text('Empty data'); } } else { return Text('State: ${snapshot.connectionState}'); } } ) ); }
Было бы здорово, если бы вы также могли получить несколько советов о том, как внести это в список 🙂
Комментарии:
1. ваш
getProducts
методasync
один, поэтому используйте толькоawait
то, что внутри него — теперь вы также вызываетеFuture.then
, что только усложняет ваш код — теперьgetProducts
всегда возвращаетnull
Ответ №1:
Ты ничего не вернешь внутрь getProducts
:
Future getProducts(vendorId) async { return await vendorsInfoColl.doc(vendorId) .collection("products") .get() .then((QuerySnapshot querySnapShot) async { if (querySnapShot.docs.isNotEmpty){ return querySnapShot.docs; } else { return null; } }); }
Чтобы избежать этого в будущем, объявите тип в своем будущем:
// vvvvvvvvvvvvvvvv Futurelt;Listlt;Documentgt;gt; getProducts(vendorId) async {