微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter + Android-从后台隔离写入文件以在UI中读取?

如何解决Flutter + Android-从后台隔离写入文件以在UI中读取?

我正在开发一个需要在后台处理一些数据并尝试将其与后端云API同步的应用程序。我还将发布适用于iOS的应用程序,但现在严格来说这是一个Android问题/观察-

我的应用程序使用background_fetch启动后台处理程序,该处理程序在我的数据源上循环进行更改。找到一个后,它将创建一个HTTP POST请求并将该数据发送到我们的云API。当该操作失败时(例如,没有网络或后端返回错误的响应)-我想将该数据放入队列中,然后稍后重试。为此,我按以下方式实现Sembast:

Future<Map<String,dynamic>> cacheData(
      Map<String,dynamic> data,bool synced) async {
    var collection = intMapStoreFactory.store(_dataCacheName);
    var cacheItem = {
      'timestamp': DateTime.Now().toIso8601String(),'data': data,'synced': synced,};

    var index = cacheItem.hashCode;

    var result = await collection.record(index).put(await _db,cacheItem);
    return result;
  }

在上面的代码中,我将哈希(int)解析为文档的ID,并使用有关是否已缓存真值的数据插入数据(在这种情况下,始终为false,并带有时间戳)。据我所知,插入正在按我的意图进行。

我的队列处理器在不同的隔离上运行-在UI中运行(如果正在运行),或者在通过 background_fetch 生成后台任务的循环中运行。在弄明白这些问题之前,我什至没有过滤数据:

Future<List<Map<String,dynamic>>> getCachedData({
    bool includeSynced,}) async {
    var collection = intMapStoreFactory.store(_dataCacheName);
    
    var cacheItems = await collection.find(await _db);

    var sorted = cacheItems
        .map((item) => {
              'id': item.key,'timestamp': DateTime.parse(item['timestamp']),'synced': item['synced'],'data': item['data'],})
        .toList();
    sorted.sort((a,b) {
      DateTime ta = a['timestamp'];
      DateTime tb = b['timestamp'];
      return tb.compareto(ta);
    });

    return sorted;
  }

从以上两个代码中,我希望在插入sembast集合时,也可以在选择它们时看到这些相同的项目,但是我发现情况并非如此...我已经在隔离之间使用其他可共享资源(shared_preferences,文件等)来体验这一点。

这样的资源是否存在我不知道的东西,或者我做错了什么?我可以使用一种解决方案来解决我的问题吗?我与Sembast无关。我喜欢它是为了易于使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。