在Flutter中缓存离线请求吗?

时间:2019-02-03 23:55:57

标签: flutter

在我的Flutter应用中,用户可以查看产品并对其评分。 该评论应发布到我的后端,以便我们获得有关产品的总体统计信息以及诸如此类的信息。 我的问题是,我该如何以某种方式缓存请求,以便当用户在离线状态下对产品进行评分(或者他暂时断开连接)时,他可以继续与应用程序的其他部分进行交互,并且当他再次在线时评论会在后台发送?

1 个答案:

答案 0 :(得分:1)

这里可能还没有答案,因为我无法添加评论,但我也在寻找相同的问题。但是我发现有两个有用的软件包:

  • <script type="text/javascript"> function openPdf(el) { var titulo = el.dataset.title; var omyFrame = document.getElementById("myFrame"); var pdfscr = el.dataset.pdfscr; document.getElementById("pdf-title").innerHTML = titulo; omyFrame.style.display = "block"; omyFrame.src = pdfscr; document.getElementById("contenido").style.display = "none"; document.getElementById("logo").style.display = "none"; document.getElementById("GridEmpleados").style.display = "none" document.getElementById("nuevoempleado").style.display = "none" } function openText(al) { var titulo = al.dataset.title; var texto = al.dataset.desc var omyFrame = document.getElementById("myFrame"); document.getElementById("pdf-title").innerHTML = titulo; document.getElementById("myFrame").style.display = "none"; document.getElementById("contenido").style.display = "block"; document.getElementById("logo").style.display = "none"; document.getElementById("contenido").innerHTML = texto; document.getElementById("GridEmpleados").style.display = "none" document.getElementById("nuevoempleado").style.display = "none" } function openHome(il) { var titulo = il.dataset.title; var texto = il.dataset.desc var omyFrame = document.getElementById("myFrame"); document.getElementById("pdf-title").innerHTML = titulo; document.getElementById("myFrame").style.display = "none"; document.getElementById("contenido").style.display = "none"; document.getElementById("logo").style.display = "block"; document.getElementById("contenido").innerHTML = texto; document.getElementById("GridEmpleados").style.display = "none" document.getElementById("nuevoempleado").style.display = "none" } function openGrid(ul) { var titulo = ul.dataset.title; var texto = ul.dataset.desc var omyFrame = document.getElementById("myFrame"); document.getElementById("pdf-title").innerHTML = titulo; document.getElementById("myFrame").style.display = "none"; document.getElementById("contenido").style.display = "none"; document.getElementById("logo").style.display = "none"; document.getElementById("contenido").innerHTML = texto; document.getElementById("GridEmpleados").style.display = "block" document.getElementById("nuevoempleado").style.display = "block" } </script> https://pub.dev/packages/flutter_offline):用于处理在线/离线连接的实用程序

  • flutter_offlinehttps://pub.dev/packages/hydrated_bloc):保留并恢复集团状态(状态管理的整体模式)。

这个想法是创建一个Hydrated集团来存储所有待处理的请求,例如,我们称为hydrated_blocPendingRequestsBloc的{​​{1}}负责检查当前的连接状态:

  • 如果用户在在线时评分:只需照常发送请求,还触发一个事件 OfflineBuilder,以检查是否有任何待处理的请求在flutter_offline中。

    • 如果有待处理的请求,也将它们发送出去。
    • 如果没有,请跳过。
  • 如果用户在离线(您要询问的主要情况)时评分:触发事件 ProcessPendingRequests,以将请求添加到已水化的团体。

我认为,我们使用水合块而不是普通块,因为即使关闭并杀死应用程序,它也可以保持其状态(包含待处理的请求)。

如果您不熟悉块模式,请访问https://bloclibrary.dev/以获得官方文档。编码愉快!