我已经在自己的Flutter应用程序中实现了Cloud Firestore,并遇到了以下问题:如果该应用程序的第一次加载(安装后)没有网络连接,则不会显示任何数据。
我的问题是:如何使Firestore中的数据在没有互联网连接的情况下在首次加载(安装后)时显示? 我的获取数据的代码是这样的:

class QuestionsListState extends State<QuestionsList> {
  @override
  Widget build(BuildContext context) {

    return new StreamBuilder<QuerySnapshot>(
      stream: _questionsCollectionReference
          .where("category", isEqualTo: _chosenCategory).orderBy("order").snapshots,
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (!snapshot.hasData) return const Text('');
        final int messageCount = snapshot.data.documents.length;
        return new ListView.builder(
          itemCount: messageCount,
          itemBuilder: (_, int index) {
            final DocumentSnapshot document = snapshot.data.documents[index];
            return new ListTile(
              title: new FlatButton(
                  onPressed: () {
                    Navigator.push(context, new MaterialPageRoute(
                      builder: (BuildContext context) => new AddAnswerDialog(),
                      fullscreenDialog: true,
                    ));
                  },
                  child: new Text(
                    document['text'],
                    style: new TextStyle(fontSize: 18.0, color: Colors.blue),
                  )),
            );
          },
        );
      },
    );
  }
}

最佳答案

我遇到了类似的情况。对我来说,解决方案是使用FutureBuilder而不是const Text('')从磁盘加载数据

换句话说,您的结构将是:

  • StreamBuilder
    hasData为假时的

  • FutureBuilder
    hasData为假时的

  • 显示一个CircularProgress
  • hasData为true时的

  • 显示磁盘数据
  • hasData为true时的

  • 显示在线数据

  • 对于初次使用的用户,将显示CircularProgress,然后显示磁盘中的数据,然后显示在线数据。如果没有加载在线数据(无网络),则用户将继续查看磁盘数据。

    09-26 23:26
    查看更多