gpt4 book ai didi

firebase - 在 Flutter 应用程序中使用 Firestore 中的离线持久性

转载 作者:IT老高 更新时间:2023-10-28 12:42:43 31 4
gpt4 key购买 nike

我正在开发一个使用 Firebase 的 Firestore 将数据发送到网络的应用。该应用程序的功能之一是能够在离线时将数据保存在设备中,并在互联网连接恢复时将其发送到 Firestore。我激活了离线持久性,但它不起作用。

调试控制台:

W/OkHttpClientTransport(28536): Failed closing connection
W/OkHttpClientTransport(28536): javax.net.ssl.SSLException: Write error: ssl=0x7f7acfc408: I/O error during system call, Broken pipe
W/OkHttpClientTransport(28536): at com.google.android.gms.org.conscrypt.NativeCrypto.SSL_write(Native Method)
W/OkHttpClientTransport(28536): at com.google.android.gms.org.conscrypt.NativeSsl.write(:com.google.android.gms@14798020@14.7.98 (040406-222931072):4)

如何在互联网恢复时激活离线持久性并与 Firestore 同步?

我的密码:

Future<Null> sendFirebaseData(var selectedModel) async {

Firestore.instance.enablePersistence(true);
var certID = await getIDCertificado();

var dateTime = new DateTime.now();
var nowHour = new DateFormat('kk:mm:ss').format(dateTime);

Map<String, dynamic> dataHeader = {
'ID': certID,
};

Map<String, dynamic> finalDataMap = {}..addAll(dataGeneral)
..addAll(dataInstrumento)..addAll(dataPadrao)
..addAll(dataAdicional)..addAll(dataHeader);

await Firestore.instance.collection('certificados').document((certID.toString()))
.setData(finalDataMap);}

最佳答案

当您在 Firestore 中使用离线持久性时,请勿使用 Transactions 或 await 进行响应。

所以,改变这个:

  await Firestore.instance.collection('certificados').document((certID.toString()))
.setData(finalDataMap);

到这里:

 Firestore.instance.collection('certificados').document((certID.toString()))
.setData(finalDataMap);

当您恢复互联网连接时,即使您在后台,您的数据也会自动同步。

在您的应用关闭时不起作用。

离线时的 promise 和回调上下文

为什么上述代码更改以删除“等待”有效。

Reference: Firebase Video - How Do I Enable Offline Support 11:13

在服务器上的文档写入成功之前,不会调用您的回调并且您的 promise 不会完成。这就是为什么如果您的 UI 等到写入完成才执行某项操作,即使实际写入本地缓存,它也会在“离线模式”下卡住。

不使用 async/await.then()callbacks 也可以。 Firestore 将始终像立即应用数据更改一样“采取行动”,因此您无需等待处理新数据。

只有当您需要确保服务器写入已经发生并且您希望在获得确认之前阻止其他事情发生时,您才需要使用回调和 promise 。

关于firebase - 在 Flutter 应用程序中使用 Firestore 中的离线持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549773/

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