gpt4 book ai didi

firebase - Flutter Firestore 离线时检索数据需要很长时间

转载 作者:行者123 更新时间:2023-12-01 16:21:26 24 4
gpt4 key购买 nike

我在 flutter 应用程序中使用 Firestore。每次用户启动应用程序时,它都会从 Firestore Cloud 检索一些数据。

QuerySnapshot dataSnapshot = await Firestore.instance
.collection('/data')
.getDocuments();

当用户第一次打开应用程序时,需要他在线连接以获取数据,正如 Firebase 文档所述

For Android and iOS, offline persistence is enabled by default. To disable persistence, set the PersistenceEnabled option to false.

因此,它应该保存应用程序之前读取过的数据,以便在设备离线时检索它;这样用户就可以随时使用已读取的相同数据访问应用程序。

问题是:设备离线时检索数据的时间太长,代码相同,没有任何改变!。

I tried to configure how much time it takes? On offline, it takes about 8 minutes and 40 seconds. But while on online, it takes just 10 seconds, maybe less.

那么我该如何解决这个问题呢?

============

更新

我设法获得有关此问题的更多日志,这花费了很多时间,并将使用离线保存的数据启动应用程序,它会打印此日志

这通常表明您的设备目前没有健康的互联网连接。客户端将以离线模式运行,直到能够成功连接到后端。

然后以3秒为例(时间不多),继续下一步的工作。

I did open a new issue in GitHub too.

有没有办法限制它所花费的时间?

最佳答案

最后,在 diegoveloper 的帮助下评论 GitHub issue ,我已经找到了解决方案。

此评论

await Firestore.instance
.collection("Collection")
.getDocuments(source: source)

如果我决定每次检查源代码然后使用它,或者我可以在启动新的 Flutter 项目时使用它,那么这是一个很好的解决方案,但现在我已经有很多代码需要更好的解决方案。所以我决定 fork cloud_firestore 包并编辑它。

您可以在这里找到它:https://github.com/ShadyBoshra2012/flutterfire/tree/master/packages/cloud_firestore

我编辑过的内容:

  1. firestore.dart
// The source of which the data will come from.
static Source _source = Source.serverAndCache;

static Source get source => _source;

Future<void> settings(
{bool persistenceEnabled,
String host,
bool sslEnabled,
bool timestampsInSnapshotsEnabled,
int cacheSizeBytes,
Source source}) async {
await channel.invokeMethod<void>('Firestore#settings', <String, dynamic>{
'app': app.name,
'persistenceEnabled': persistenceEnabled,
'host': host,
'sslEnabled': sslEnabled,
'timestampsInSnapshotsEnabled': timestampsInSnapshotsEnabled,
'cacheSizeBytes': cacheSizeBytes,
});
if (source != null) _source = source;
}
  • query.dartsource = Firestore.source; 第 92 行

  • document_reference.dartsource = Firestore.source; 第 83 行

  • 如何使用它?

    因此,您可以通过使用 Google 的连接包以这种方式使用我的 fork 存储库:https://pub.dev/packages/connectivity .

    pubspec.yaml 文件中添加我的 fork 存储库

    cloud_firestore:
    git:
    url: https://github.com/ShadyBoshra2012/flutterfire.git
    path: packages/cloud_firestore

    然后在您的第一个屏幕或主屏幕

    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.none) {
    await Firestore.instance.settings(source: Source.cache);
    } else {
    await Firestore.instance.settings(source: Source.serverAndCache);
    }

    如果您想在更改连接状态时刷新源:

    StreamSubscription subscription;

    void initState() {
    super.initState();
    // Check the internet connection after each change
    // of the connection.
    subscription = Connectivity()
    .onConnectivityChanged
    .listen((ConnectivityResult result) async {
    // Check the internet connection and then choose the appropriate
    // source for it.
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.none) {
    await Firestore.instance.settings(source: Source.cache);
    } else {
    await Firestore.instance.settings(source: Source.serverAndCache);
    }
    });
    }

    @override
    void dispose() {
    super.dispose();
    subscription.cancel();
    }

    所以我希望大家都能看到它,并等待 Flutter 团队编写出越来越好的解决方案。感谢大家的参与。

    关于firebase - Flutter Firestore 离线时检索数据需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436007/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com