在Flutter应用中在Firestore中使用离线持久性

布伦诺·法古德斯(Brenno Fagundes)

我正在开发一个使用Firebase的Firestore将数据发送到Web的应用程序。该应用程序的功能之一是能够在脱机时将数据保存在设备中,并在恢复互联网连接后将其发送到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@[email protected] (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中使用离线持久性时,请勿使用“交易”或await进行响应。

因此,更改此:

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

对此:

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

恢复互联网连接后,即使您处于后台,数据也将自动同步。

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

脱机时的承诺和回调上下文

为什么更改上面的代码以删除“ await”有效。

参考:Firebase视频-如何启用离线支持11:13

在服务器上成功写入文档之前,不会调用您的回调并且您的诺言也不会完成。这就是为什么如果您的UI等待直到写操作完成,它似乎会冻结在“脱机模式”,即使实际上是对本地缓存进行写操作也是如此。

它是确定不使用async / await.then()callbacksFirestore始终会“采取行动”,就好像立即应用了数据更改一样,因此您无需等待处理新数据。

仅在需要确保发生服务器写入并且您想要阻止其他事情发生直到获得确认之前,才需要使用回调和Promise。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Firestore,是否可以将离线持久性配置为在特定文档中设置“关闭”?

Web上的Firestore离线持久性

启用离线持久性 Cloud Firestore

使用Cloud Firestore时是否需要为React Native应用程序启用离线持久性?

Flutter 中的持久性 Ticker

Firestore作为离线持久性机制的可靠性如何?

并发,离线持久性和get()

Firestore具有大集合的慢查询,除非禁用了离线持久性

Flutter:如何删除以利用Firebase离线持久性?

索引计算的持久性VArBinary(Max)列,并在带ODBC的Access 2003中使用

在Flutter中具有路由的持久性BottomNavigationBar

如何使用cookie在持久性Perl Web应用程序中处理SOAP服务?

在 Unity 中使用持久性数据递增整数

在TomEE中使用Hibernate作为持久性提供程序

使用Servlet与持久性Java应用程序对话

如何在AppDelegate中初始化Core Data的持久性容器,并在整个应用程序中使用它?

如何清除Firestore持久性数据?

离线时android mqtt数据持久性

使用FXRegistry在FXRuby中存储持久性数据

Flutter cloud_firestore持久性即使启用也无法正常工作

在卡片视图中使用时,Android中带有圆角的持久性底部表会崩溃

Hive HQL中参数的持久性?

Django中的持久性计算字段

房间持久性库中的关系

Electron 5 中的持久性 cookie

Go中的持久性程序

房间持久性库中的HashMap

Javascript / Jquery中的持久性Cookie

休眠中的持久性是什么?