dart - Flutter:在第一次加载时将数据预加载到 Firestore 本地缓存中

我在 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 为 false
      • FutureBuilder
        • hasData 为 false
          • 显示一个CircularProgress
        • hasData 为真时
          • 显示磁盘数据
    • hasData 为真时
      • 显示在线数据

对于第一次使用的用户,这将显示一个 CircularProgress,然后是来自磁盘的数据,然后是在线数据。如果在线数据没有加载(没有网络),用户一直看到磁盘数据。

https://stackoverflow.com/questions/49752836/

相关文章:

android - 如何在 flutter 和平台之间传输麦克风数据?

flutter - 如何使 Bottom Sheet 格的高度跟随 JSON 的项目数量

flutter - 将文本包裹在一个圆圈内 (Flutter)

flutter - 找出 ListView 中的哪些项目是可见的

Flutter - 加载 Assets 进行测试

dart - 如何获取当前小部件的偏移量

cookies - Dart/Flutter 身份验证实现

flutter - 如何在单元测试期间访问 StatefulWidget 的状态内容?

dart - 如何运行 `source_gen` ?

android-studio - Android Studio 在创建新的 Flutter 项目时卡