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
  }
});
Другие вопросы по тегам