代码之家  ›  专栏  ›  技术社区  ›  Darkhan

颤振:在第一次加载时将数据预加载到Firestore本地缓存中

  •  6
  • Darkhan  · 技术社区  · 6 年前

    我已经在我的Flatter应用程序中实现了云Firestore,并遇到了这个问题:如果在第一次加载应用程序时(安装后)没有网络连接,则不会显示任何数据。 我的问题是:如何使Firestore中的数据在第一次加载(安装后)时显示,即使没有internet连接? 我提取数据的代码如下:

    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),
                      )),
                );
              },
            );
          },
        );
      }
    }
    
    3 回复  |  直到 6 年前
        1
  •  4
  •   Andrei Tudor Diaconu    6 年前

    我遇到了类似的情况。我的解决方案是使用 FutureBuilder 而不是 const Text('')

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

    • StreamBuilder
      • 什么时候 hasData 为假
        • FutureBuilder公司
          • 什么时候 hasData公司 为假
            • 显示a CircularProgress
          • 什么时候 hasData公司 是真的
            • 显示磁盘数据
      • 什么时候 hasData公司 是真的
        • 显示联机数据

    对于首次用户,这将显示 循环进度 ,然后是来自磁盘的数据,然后是联机数据。如果在线数据未加载(无网络),则用户会一直看到磁盘数据。

        2
  •  0
  •   user3136093    6 年前

    只能在再次添加之前检查是否已缓存任何数据。

    也发现这个由Tensor编程的颤振信息YouTube视频很有用 Making Use of Utility Plugins for Dart's Flutter Framework 尤其是连接状态部分。

        3
  •  -3
  •   user3136093    6 年前

    这样行吗?还没有尝试过,但正在考虑下个月为离线的国家公园应用程序做类似的尝试。

    Firestore.instance.collection('<collection>').document().setData(
            {
              '<field>': '<data>',
            },
          );
    

    使用云firestore插件> https://github.com/flutter/plugins/tree/master/packages/cloud_firestore