Firebase 获取所有文档无法正常工作

问题描述 投票:0回答:1

我正处于我的 flutter 职业生涯的初期。现在,我面临着一个问题。我想是因为我不太了解flutter代码的调用顺序。

问题是当我启动应用程序时(通过保存所有文件),我看到第一个屏幕截图,但是当应用程序工作并且不更改任何代码时,我在 dart 文件上输入 CTRL+S ,我最终看到第二个屏幕。为什么我无法直接访问第二个屏幕?

*该结构基本上是获取集合中的所有文档并在网格视图中列出它们。

final CollectionReference sebzeCollection =
    Firestore.instance.collection('sebzeler');

class RightBody extends StatefulWidget {
  @override
  _RightBodyState createState() => _RightBodyState();
}

class _RightBodyState extends State<RightBody>
    with AutomaticKeepAliveClientMixin {
  @override
  void initState() {
    getAllSebze();

    super.initState();
  }

  List<SebzeMeyve> sebzeler;

  getAllSebze() async {
    sebzeler = new List<SebzeMeyve>();
    sebzeCollection.getDocuments().then((QuerySnapshot snapshot) {
      snapshot.documents.forEach((DocumentSnapshot doc) {
        SebzeMeyve sebze = new SebzeMeyve(
            isInSale: doc.data['isInSale'],
            organic: doc.data['organik'],
            dogal: doc.data['dogal'],
            fiyat: doc.data['fiyat'],
            mensei: doc.data['mensei'],
            name: doc.data['name'],
            picture: doc.data['picture'],
            stok: doc.data['stok']);
        sebzeler.add(sebze);
      });
    });
  }

  List<Widget> _setBuildCards() {
    List _listings = new List<Widget>();
    for (int i = 0; i < sebzeler.length; i++) {
      _listings.add(_buildCard(
          'T-shirt',
          sebzeler[i].name.toUpperCase(),
          '\₺' + sebzeler[i].fiyat,
          sebzeler[i].picture,
          false,
          false,
          context));
    }
    return _listings;
  }
  @override
  Widget build(BuildContext context) {
    // List<SebzeMeyve> _sebzeler = widget.test;
    //super.build(context);
    return Padding(
        padding: const EdgeInsets.only(top: 10.0),
        child: Container(
          padding: EdgeInsets.only(left: 15, right: 15.0),
          width: MediaQuery.of(context).size.width - 30,
          height: MediaQuery.of(context).size.height - 50,
          child: GridView.count(
            crossAxisCount: 3,
            children: _setBuildCards(),
          ),
        ));
  }

第一个屏幕截图

第二个屏幕截图

谢谢!

firebase flutter
1个回答
0
投票

我认为这是一个状态问题,并且您在更改变量后没有更新应用程序的状态。当您更改变量以将行换行到 setState 时,这是常见的做法。

更新后的 getAllSebze 函数应如下所示:

getAllSebze() async {
    setState(() {
      sebzeler = new List<SebzeMeyve>();
    }
    sebzeCollection.getDocuments().then((QuerySnapshot snapshot) {
      snapshot.documents.forEach((DocumentSnapshot doc) {
        SebzeMeyve sebze = new SebzeMeyve(
            isInSale: doc.data['isInSale'],
            organic: doc.data['organik'],
            dogal: doc.data['dogal'],
            fiyat: doc.data['fiyat'],
            mensei: doc.data['mensei'],
            name: doc.data['name'],
            picture: doc.data['picture'],
            stok: doc.data['stok']);
       setState(() {
          sebzeler.add(sebze);
       })
      });
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.