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

DEBUG CONSOLE:

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)

当Internet恢复时,如何激活脱机持久性并与FiRestore同步?

MY CODE:

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);

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

当您的应用程序关闭时不起作用.

Context Of Promises & Callbacks when Offline

为什么上面的代码更改为删除"等待"有效.

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

在服务器上成功写入文档之前,不会调用您的回调,您的promise 也不会完成.这就是为什么如果用户界面等到写操作完成后才执行某项操作,那么即使写操作实际上是在本地缓存中进行的,它似乎也会在"脱机模式"下冻结.

不用async / await.then()callbacks也可以.FiRestore将始终"执行",就好像数据更改是立即应用的一样,因此您无需等待处理新数据.

您只需要使用回调和promise ,当您需要确保服务器写入已经发生,并且您希望挡路其他事情不会发生,直到您得到确认.

Flutter相关问答推荐

ShaderMask上的文本渐变问题

如何在不使用NULL-check(!)的情况下缩小`FutureBuilder.Builder()`内部的`Snaphot`范围

手势捕获的异常:类型';Double';不是类型转换中类型';Double';的子类型

底部导航栏项目在抖动中不更改 colored颜色

如何在Ffltter Chrome应用程序中使用webview_fltter_web显示自定义html而不是外部uri?

Flutter AppBar Animation反向调试

点击表情符号按钮后,Flutter 文本域文本编辑控制器将文本恢复为原始值

Android上火焰瓷砖之间的线条飘动

缩短经常使用的行Theme.of(context).colorScheme

在LinkedIn上分享Fighter和Web的链接会产生不同的结果

带有图标抖动的自定义下拉按钮

如何翻转这种剪刀设计

Flutter 日期时间格式

Flutter Web Dio XMLHttpRequest 上传大文件时出错

将状态维护到 asyncNotifier

graphql_flutter 错误:非抽象类GraphQLWebSocketChannel缺少实现

Flutter HLS .m3u8 视频无法实时播放

在 flutter 中使用 StreamBuilder 在文本字段中键入时显示过滤记录

Navigator.push '!_debugLocked' 上的错误:不正确

在Flutter 中将数字转换为印度文字样式