Streambuilder во Flutter для Firestore
Привет, я новичок во флаттере, и я пытаюсь получить данные из хранилища с помощью построителя потоков и отобразить счетчик, пока данные извлекаются из базы данных firebase. Я пробовал реализовать конструктор потоков и конструктор будущего. У меня есть функция, которая извлекает данные из хранилища огня, а затем я передаю данные в другую функцию для заполнения серебряной сетки. Кто-нибудь может мне помочь?
getDevotions(DevotionNotifier d) async {
QuerySnapshot snapshot =
await Firestore.instance.collection('devotions').getDocuments();
List<devotion> _devotionList = [];
snapshot.documents.forEach((document) {
devotion d1 = devotion.fromMap(document.data);
_devotionList.add(d1);
});
d.devotionList = _devotionList;
}
}
class _dailyDevotionPageState extends State<dailyDevotionPage> {
@override
void initState() {
DevotionNotifier _devotionNotifier =
Provider.of<DevotionNotifier>(context, listen: false);
getDevotions(_devotionNotifier);
super.initState();
}
@override
Widget build(BuildContext context) {
DevotionNotifier _devotionNotifier = Provider.of<DevotionNotifier>(context);
getDevotions(_devotionNotifier);
String url = "https://picsum.photos/412/700";
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
expandedHeight: 220.0,
pinned: true,
elevation: 50,
flexibleSpace: FlexibleSpaceBar(
collapseMode: CollapseMode.parallax,
title: Text(
'Devotional',
style: TextStyle(
fontFamily: 'Merriweather',
),
),
background: Image.asset(
'assets/2.jpg', // <=== Add your own image to assets or use a .network image instead.
fit: BoxFit.cover,
),
),
),
new SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200.0,
mainAxisSpacing: 10.0,
crossAxisSpacing: 6.0,
childAspectRatio: 0.7,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
int i = _devotionNotifier.devotionList.length - index - 1;
return devotionLayout(_devotionNotifier, i, context);
},
childCount: _devotionNotifier.devotionList.length,
),
),
],
),
),
);
}
1 ответ
Вероятно, у вас возникли проблемы с получением данных из установленной вами коллекции. Вы можете вернуться к руководству Firestore по выборке всех документов в коллекции и посмотреть, не пропустили ли вы какой-либо из них в своей настройке.
Получение коллекции должно выглядеть примерно так.
FirebaseFirestore.instance.collection('devotions')
.get().then((querySnapshot) {
for (var docSnapshot in querySnapshot.docs) {
print('${docSnapshot.id} => ${docSnapshot.data()}');
// Assign the object from the snapshot to your List
}
});